私はLispでプロジェクトオイラーの質問2を解決しようとしています。この再帰的なソリューションは実行時にスタックを爆破しますが、Lisp(clispを使用)は末尾再帰を認識すると思いました。これはトップレベルに入力されています。
(defun e2-problem (&optional (f1 1) (f2 1) (sum 0))
"Sum fibonacci sequence, even terms up to 4 million"
(if (> f2 4000000) sum)
(e2-problem f2 (+ f1 f2) (if (evenp f2)
(+ sum f2)
sum))
私の実装は最適化のために正しく配置されていませんか?私が慣用的な再帰に頼ることができなければ、これは私のLisp教育をかなり妨げるだろうと思います。