Решил заняться изучением Lisp'а, нашел учебник, лекции в интернете, сижу, разбираюсь.
Собственно, нашел задание:
Напишите функцию, возвращающую список атомов из данного S-выражения в том же порядке, в котором они в него входят.
Пример:
> (atoms '((a b) c nil (d (e f g))))
(A B C NIL D E F G)
Написал
(DEFUN atoms (x)
(COND
((NULL x) NIL)
((ATOM x) x)
(T
(list
(atoms (list (CAR x)))
(atoms (list (CDR x)))
)
)
)
)
Однако адекватно она работает только в 2-х случаях — когда на вход подали пустой список, либо атом. Любой уход в рекурсию и в результате получаем Stack Overflow
Вопрос — что я делаю не так?
Вроде, по моим представлениям, всё правильно.