Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 35
1

Удалить элементы первого списка по номерам второго списка без использования вспомогательных функций

05.12.2015, 16:08. Показов 1364. Ответов 10
Метки lisp (Все метки)

Author24 — интернет-сервис помощи студентам
Может кто знает классический вид функции удаление элементов списка по номерам второго списка.Важно то,что нельзя использовать вспомогательные функции и циклы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2015, 16:08
Ответы с готовыми решениями:

Удалить из второго списка все вхождения головы первого списка
2. Даны 2 списка. Удалить из второго все вхождения головы первого списка.

Удалить элементы первого списка из второго(т.е. те которые совпадают),написать через рекурсию
дано два списка (L1 L2),нужно удалить элементы первого списка из второго(т.е. те которые...

Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка.
Описать функцию, которая определяет, входят ли все элементы первого списка в состав второго списка....

Даны два списка. Каждый элемент первого списка ассоциативно связан соответствующим элементом второго списка
Помогите пожалуйста Даны два списка: список студентов и список их успеваемости. Каждый элемент...

10
4705 / 4400 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
05.12.2015, 16:45 2
Lisp
1
2
3
4
5
6
7
8
(defun drop-index (w v &optional (n 0))
  (cond ((null w) nil)
        ((null v) w)
        ((= (car v) n) (drop-index (cdr w) (cdr v) (1+ n)))
        ((cons (car w) (drop-index (cdr w) v (1+ n))))))
 
> (drop-index '(a b c d e) '(1 2 4))
(A D)
Добавлено через 1 минуту
Lisp
1
2
3
4
5
6
7
(defun drop-index (w v &optional (n 0))
  (cond ((or (null w) (null v)) w)
        ((= (car v) n) (drop-index (cdr w) (cdr v) (1+ n)))
        ((cons (car w) (drop-index (cdr w) v (1+ n))))))
 
> (drop-index '(a b c d e) '(1 2 4))
(A D)
3
1046 / 967 / 153
Регистрация: 10.08.2015
Сообщений: 5,231
05.12.2015, 19:30 3
еще вариант
Lisp
1
2
3
4
5
6
(defun drop (v w)
  (cond
    ((null w) nil)
    ((null v) w)
    ((zerop (car v)) (drop (mapcar '1- (cdr v)) (cdr w)))
    ((cons (car w) (drop (mapcar '1- v) (cdr w))))))
4
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
05.12.2015, 20:02 4
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
;; racket-lang.org
(define (foo lst indexes)
  (let loop ((lst lst)
             (index 0)
             (indexes (sort indexes <)))
    (let/cc return
      (when (or (null? indexes) (null? lst))
        (return lst))
      (when (= index (first indexes))
        (return (loop (rest lst) (add1 index) (rest indexes))))
      (return (cons (first lst) (loop (rest lst) (add1 index) indexes))))))
 
 
(define (bar lst indexes)
  (let ((counter -1))
    (for/list ((i lst)
               #:unless (and (eq? (void) (set! counter (add1 counter)))
                             (member counter indexes)))
      i)))
3
Модератор
Эксперт функциональных языков программированияЭксперт Python
37443 / 20814 / 4281
Регистрация: 12.02.2012
Сообщений: 34,232
Записей в блоге: 14
05.12.2015, 21:07 5
_sg, Ваш код требует, чтобы список позиций удаляемых элементов был отсортирован. В противном случае код работает некорректно...

Вот "крокодил", который не требует упорядочения списка позиций (и нечувствителен к повторениям в этом списке):

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun dd (lst pl &optional (f nil) (c 0) (tmp nil) (res nil))
  (cond ((null f)  
           (cond ((null lst) (dd nil nil t 0 tmp nil))
                 ((member c pl) (dd (cdr lst) pl nil (+ c 1) (cons (list (car lst) t) tmp)))
                 (t (dd (cdr lst) pl nil (+ c 1) (cons (list (car lst) nil) tmp)))))
        (t (cond ((null tmp) res)
                 ((cadar tmp) (dd nil nil t 0 (cdr tmp) res))
                 (t (dd nil nil t 0 (cdr tmp) (cons (caar tmp) res)))))))
 
==> dd
 
(dd '(a b c d e) '(2 1 1 1 4))
 
==> (a d)
3
1063 / 957 / 109
Регистрация: 04.11.2012
Сообщений: 1,000
05.12.2015, 21:41 6
Lisp
1
2
3
4
5
(defun del-items (seq i &optional (c 0))
  (cond
    ((null seq) ())
    ((member c i) (del-items (cdr seq) i (1+ c)))
    (t (cons (car seq) (del-items (cdr seq) i (1+ c))))))
3
Модератор
Эксперт функциональных языков программированияЭксперт Python
37443 / 20814 / 4281
Регистрация: 12.02.2012
Сообщений: 34,232
Записей в блоге: 14
05.12.2015, 21:47 7
Lambdik, класс!!!
1
4705 / 4400 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
06.12.2015, 09:20 8
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun drop-index (w v)
  (drop w (sort (copy-list v) #'<)))
 
(defun drop (w v &optional (n 0))
  (cond ((or (null w) (null v)) w)
        ((= (car v) n) (drop (cdr w) (cdr v) (1+ n)))
        ((cons (car w) (drop (cdr w) v (1+ n))))))
 
> (drop-index '(a b c d e) '(1 2 4))
(A D)
> (drop-index '(a b c d e) '(4 1 2))
(A D)
Добавлено через 12 секунд
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun drop-index (w v)
  (drop w (sort (copy-list v) #'<)))
 
(defun drop (w v &optional ac (n 0))
  (if (or (null w) (null v))
      (append (nreverse ac) w)
      (drop (cdr w)
            (if (= (car v) n) (cdr v) v)
            (if (= (car v) n) ac (cons (car w) ac))
            (1+ n))))
 
> (drop-index '(a b c d e) '(1 2 4))
(A D)
> (drop-index '(a b c d e) '(4 1 2))
(A D)
2
1046 / 967 / 153
Регистрация: 10.08.2015
Сообщений: 5,231
06.12.2015, 16:06 9
Lisp
1
2
3
4
5
6
7
(defun drop (v w &optional (n 0)
                 &aux (q (cdr w))
                      (m (1+ n)))
  (cond
    ((some 'null (list v w)) w)
    ((find n v) (drop (remove n v) q m))
    ((cons (car w) (drop v q m)))))
2
0 / 0 / 2
Регистрация: 26.01.2011
Сообщений: 96
09.12.2018, 12:30 10
А как сделать то же самое, но при условии что нумерация элементов начинается с 1?
0
4705 / 4400 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
09.12.2018, 17:04 11
Lisp
1
2
3
4
5
6
7
8
9
10
(defun drop-index (w v)
  (drop w (sort (copy-list v) #'<)))
 
(defun drop (w v &optional (n 1))
  (cond ((or (null w) (null v)) w)
        ((= (car v) n) (drop (cdr w) (cdr v) (1+ n)))
        ((cons (car w) (drop (cdr w) v (1+ n))))))
 
> (drop-index '(a b c d e) '(2 3 5))
(A D)
2
09.12.2018, 17:04
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.12.2018, 17:04
Помогаю со студенческими работами здесь

Заданы три списка. Удалить из первого списка все элементы остальных списков
Помогите пожалуйста, мне нужно сессию досрочно сдать( в роддом надо) а практика только началась, а...

Инверсия списка без использования стандартных функций
Вообщем задание очень простое, на входе дан список типа int на выходе тоже, нужно сделать инверсию....

Поменять местами первый элемент первого списка с последним элементом второго списка
Здравствуйте, вот такое задание : Поменять местами первый элемент первого списка с последним...

Вставить после каждого нечетного элемента первого списка наибольший элемент второго списка
Сформировать два списка из N целочисленных случайных элементов (N – вводится пользователем, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Какой язык программировани­я лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru