У меня есть следующие две функции, которые я хочу объединить в один:
(defun fib (n)
(if (= n 0) 0 (fib-r n 0 1)))
(defun fib-r (n a b)
(if (= n 1) b (fib-r (- n 1) b (+ a b))))
Я хотел бы иметь только одну функцию, поэтому я попробовал что-то вроде этого:
(defun fib (n)
(let ((f0 (lambda (n) (if (= n 0) 0 (funcall f1 n 0 1))))
(f1 (lambda (a b n) (if (= n 1) b (funcall f1 (- n 1) b (+ a b))))))
(funcall f0 n)))
однако это не работает. Точная ошибка *** - IF: variable F1 has no value
Я начинаю до тех пор, пока LISP идет, поэтому я был бы признателен за ясный ответ на следующий вопрос: как вы пишете рекурсивную лямбда-функцию в lisp?
Спасибо.