Как отмечается в моем комментарии к вопросу, проблема заключается в неуместных скобках.Определение должно быть:
(defun flatten (x)
(cl-labels ((rec (x acc)
(cond ((null x) acc)
((atom x) (cons x acc))
(t (rec (car x) (rec (cdr x) acc))))))
(rec x nil)))
В оригинале ((rec (x acc))
определяет rec
как функцию, возвращающую nil
.Изменяя его на ((rec (x acc)
, выражение cond
становится телом rec
, а затем после балансировки скобок, добавляя закрывающую скобку после предложения t
в cond
, функция flatten
работаеткак и ожидалось:
(flatten '(1 (3)))
(1 3)