Ваш код довольно близок к правильному, просто небольшая ошибка в базовом случае:
Для пустого списка вы возвращаете пустой список.Итак, если у вас есть список (6)
, вы добавляете 6 к foo
пустого списка, который является пустым списком.Это не работает, потому что вы не можете добавить число в список.
Вы можете легко исправить это, сделав foo
return 0
вместо lst
, когда lst
пусто.
Как примечание стиля: смешивание cond
и if
, как это, кажется немного избыточным.Я бы написал так, используя только cond
вместо:
(defun foo (lst)
(cond
((null lst)
0)
((> (car lst) 3)
(1+ (foo (cdr lst))))
(T
(foo (cdr lst)))))