Опишите функцию, которая из исходного списка формирует список, содержащий только символьные атомы, учитывая элементы подсписков / common lisp
Опишите функцию, которая из исходного списка формирует список, содержащий только символьные атомы, учитывая элементы подсписков. Например, результатом применения функции к аргументу ’(a 3 (4 b 7 c (4 d)) e) должен быть ’(a (b c (d)) e).
Помогите решить эту задачу на языке common lisp
Ответы (1 шт):
Ну навскидку будет что-то такое.
(defun func (lst)
(if (atom lst)
(if (symbolp lst)
lst
nil
)
(if (null (func (car lst)))
(func (cdr lst))
(cons (func (car lst)) (func (cdr lst)) ))))
(print (func '(1 2 a b 2 ( c ( d 15)))))
;(A B (C (D)))
Можно, наверное, еще как-то поредуцировать функцию.
Суть ее такова :
Если у нас атомарный элемент (символ, число), то дальше проверяем с помощью функции symbolp — символ ли это, если символ, то возврщаем его, иначе nil.
Если перед нами список, то каждый его элемент рекурсивно прогоняем через эту же функцию. Далее, из всех элементов, не равных nil создается список. Пустые списки сворачиваются.