Из произвольного(с вложенностью) списка удалить все элементы, являющиеся числом или символом - Lisp
Формулировка задачи:
Решение задачи: «Из произвольного(с вложенностью) списка удалить все элементы, являющиеся числом или символом»
- (defun tree-remove-if (f tree)
- "Delete tree elements by predicate"
- (cond ((null tree) nil)
- ((listp (car tree))
- (cons (tree-remove-if f (car tree))
- (tree-remove-if f (cdr tree))))
- ((funcall f (car tree))
- (tree-remove-if f (cdr tree)))
- (T (cons (car tree)
- (tree-remove-if f (cdr tree))))))
- (defun tree-remove-if-not (f tree)
- "Delete tree elements by not predicate"
- (cond ((null tree) nil)
- ((listp (car tree))
- (cons (tree-remove-if-not f (car tree))
- (tree-remove-if-not f (cdr tree))))
- ((funcall f (car tree))
- (cons (car tree)
- (tree-remove-if-not f (cdr tree))))
- (T (tree-remove-if-not f (cdr tree)))))
- (tree-remove-if
- #'(lambda (x) (or (numberp x) (symbolp x)))
- '(1 2 3 4 5 (Brown (Fox 6)) "jumps"))
- (tree-remove-if-not
- 'stringp
- '(1 2 3 4 5 (Brown (Fox 6)) "jumps"))
Объяснение кода листинга программы
В первом куске кода, в функции tree-remove-if
, определённый анонимный функцию, которая удаляет элементы из списка, используя другую функцию (называемую f
) в качестве фильтра. Эта функция применяет этот фильтр к каждому элементу списка, и если элемент соответствует, он удаляется. Если элемент не соответствует, он добавляется в новый список. Эта функция применяется рекурсивно к каждому элементу списка, пока не будет просмотрено все элементы.
Во втором куске кода, в функции tree-remove-if-not
, определённый анонимный функцию, которая также удаляет элементы из списка, используя другую функцию (называемую f
) в качестве фильтра. Однако, вместо того чтобы удалять элементы, которые соответствуют фильтру, эта функция удаляет элементы, которые НЕ соответствуют фильтру.
В третьем куске кода, функция tree-remove-if
применяется к списку '(1 2 3 4 5 (Brown (Fox 6))
jumps)
с фильтром #'(lambda (x) (or (numberp x) (symbolp x))). Эта функция удаляет все числа и символы из списка, оставляя только остальные элементы. Результатом является список
'(1 2 3 4 5 (Brown (Fox 6)) jumps
). В четвёртом куске кода, функция
tree-remove-if-notприменяется к списку
'(1 2 3 4 5 (Brown (Fox 6)) jumps
)с фильтром
'stringp. Эта функция удаляет все элементы, которые являются строками, из списка, оставляя только остальные элементы. Результатом является список
'(1 2 3 4 5 (Brown (Fox 6)) jumps
)`.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д