Из произвольного(с вложенностью) списка удалить все элементы, являющиеся числом или символом - 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
)`.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д