Я хочу создать функцию, которая сглаживает список и удаляет весь потенциал nil
внутри.Сглаживание списков (при удалении «nil» и удержании атомов после «.») В lisp
Ожидаемое поведение, пример 1:
(myfunc '(a (b (c) (d)) (e f) (g (h)) nil)) => (a b c d e f g h)
Ожидаемое поведение, пример 2:
(myfunc '(a . d)) => (a d)
моя функция до сих пор:
(defun myfunc (l)
(cond
((atom l) nil)
((and (atom (car l)) (not (equal (car l) nil))) (cons (car l) (myfunc (cdr l))))
(t (append (myfunc (car l)) (myfunc (cdr l))))))
Моя функция работает, как ожидалось для первого пример, но не второй. я получаю:
(myfunc '(a . d)) => (a)
Почему это не держать, что
d
?Есть ли способ исправить это?
То, как исправить это, чтобы пройти через ваш код с неисправной например, строка за строкой. Это займет около двух минут, и вы начнете создавать ощущение связанных списков и минусов и cdr, в то же время вы увидите, как это происходит. – kennytilton