У меня есть эта функция Lisp:
(defun F(l)
(cond
((atom l) -1)
((>(F(car l))0)(+(car l)(F(car l))(F(cdr l))))
(t(F(cdr l)))
)
)
и я хочу предотвратить двойной вызов рекурсивной функции (F (car l))
во второй строке cond с использованием лямбда-функции.
Я пытался что:
(defun F(l)
((LAMBDA (ff)
(cond
((atom l) -1)
((> ff 0)(+(car l) ff (F(cdr l))))
(t(F(cdr l)))
)
) (F (car l)))
)
но я получаю ошибку:
АВТОМОБИЛЬ: 1 - это не список
при вызове (F '(1 2 3 4))
.
Также я не уверен, правильно ли это позволяет избежать двойного рекурсивного вызова.