gpt4 book ai didi

recursion - 在 lambda 函数中递归

转载 作者:太空宇宙 更新时间:2023-11-03 18:32:56 25 4
gpt4 key购买 nike

我希望将以下 2 个功能合并为一个:

(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 中编写递归 lambda 函数?

谢谢。

最佳答案

LET 在概念上同时绑定(bind)变量,使用相同的封闭环境来评估表达式。使用 LABELS相反,它还绑定(bind)了函数命名空间中的符号 f0f1:

(defun fib (n)
(labels ((f0 (n) (if (= n 0) 0 (f1 n 0 1)))
(f1 (a b n) (if (= n 1) b (f1 (- n 1) b (+ a b)))))
(f0 n)))

关于recursion - 在 lambda 函数中递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7607338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com