Я пытаюсь выучить Лисп (на самом деле elisp), и я попытался написать следующую функцию в качестве упражнения Project Euler Задача 2
(defun sumfib (n fn1 fn2 sum)
"Calculate Fibonacci numbers up to 4,000,000 and sum all the even ones"
(if (< 4000000 (+ fn1 fn2))
sum
(if (equal n 3)
(sumfib 1 (+ fn1 fn2) fn1 (+ sum (+fn1 fn2)))
(sumfib (+ n 1) (+ fn1 fn2) fn1 sum)))
Когда я оцениваю это, я получаю следующую ошибку:
Debugger entered--Lisp error: (void-variable fn1)
(+ fn1 fn2)
(< 4000000 (+ fn1 fn2))
...
Почему он не распознает fn1? Если я попытаюсь поставить (+ fn1 fn2) перед «если», он не будет там жаловаться, так почему же здесь ошибка?
Кроме того, я понимаю, что функция на самом деле может быть неправильной, но сейчас я не беспокоюсь о логике - я выясню это позже. Пока меня интересует только понимание этой ошибки.