Удалить атом из списка произвольной структуры - Lisp

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, выполнил задание рекурсивно, прошу помочь написать еще итерационным способом и с помощью функционала.
(defun del (a L) 
(cond 
((null L) nil)
((atom L) (cond ((eq a L) nil) (t L)))
((eq a (car L)) (del a (cdr L)))
(t (cons (del a (car l)) (del a (cdr l))))))

Решение задачи: «Удалить атом из списка произвольной структуры»

textual
Листинг программы
(Defun RunDelItem (L A)
(MapCon '(Lambda (L2) (If (Eq (Car L2) A) Nil (List (Car L2)))) L ))
 
(defun DelItem (A L)
(cond ((Not (Atom A)) nil)
(((ListP L)) nil)
(T (RunDelItem L A))
)
)

Объяснение кода листинга программы

В коде представлена функция RunDelItem, которая принимает два аргумента - список L и атом A. Функция удаляет все вхождения атома A из списка L. Список L передается во внутреннюю функцию MapCon, которая применяет к каждому элементу списка L2 функцию Lambda. Внутри функции Lambda проверяется, является ли первый элемент списка L2 равным атому A. Если это так, то возвращается Nil, иначе возвращается список без изменений. Функция DelItem принимает два аргумента - атом A и список L. В функции используется конструкция cond, которая проверяет различные условия и возвращает соответствующее значение. Если A не является атомом, то возвращается nil. Если L является списком, то возвращается nil. В противном случае вызывается функция RunDelItem с аргументами L и A. Таким образом, код представляет собой функцию DelItem, которая удаляет атом из списка, используя функцию RunDelItem.

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


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

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

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