Удаление из списка - 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).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5
Похожие ответы