Удаление из списка - Lisp
Формулировка задачи:
Написать функцию удаления из списка первого встреченного элемента соответствующего указанному значению.
(Использовать рекурсию)
Как найти элемент - понятно, а как составить список без него?
(defun find(elem list)
(cond ((null list) nil)
((eql (car list) elem) t)
(t (find elem (cdr list)))
))Решение задачи: «Удаление из списка»
textual
Листинг программы
(defun drop (e w) (cond ((null w) nil) ((equalp (car w) e) (cdr w)) (t (cons (car w) (drop e (cdr w)))))) > (drop 'b '(a b c)) (A C)
Объяснение кода листинга программы
В данном коде определён встроенный функциюм drop, которая принимает два аргумента - e и w.
Если w равно nil, то возвращается nil.
Если первый элемент w равен e, то возвращается cdr w.
В противном случае, функция cons создаёт новый список, в котором первый элемент - это car w, а все остальные элементы - это результат вызова функции drop с аргументами e и cdr w.
Пример использования функции drop со списком (a b c) и аргументом 'b' показывает, что функция удаляет все вхождения аргумента из списка. В результате получается список (a C).