我试图声明一个在递归函数中使用的局部变量,但我的 let 似乎在每次函数递归时都被调用。我希望 let 函数被调用一次以声明一个变量并为其赋值 nil,然后我想在我的递归函数中更新这个局部变量的值,而不是每次递归都将其删除。
这是我的代码的简化框架。
(defun recursive-function (l1 l2)
(let ((?x nil))
(cond (...
...
... ;trying to update value of ?x here with (setf ?x 5)
(recursive-funtion (rest l1)(restl2)) ;recursive call made
))))
最佳答案
你所写的正是你所说的你不想要的;递归函数内部的一个局部变量,应该在每次传递时更新它。如果我没理解错的话,你需要做类似的事情
(defun recursive-function (l1 l2)
(let ((?x nil))
(labels ((actual-recursion (a b)
(cond (...
...
...
(actual-recursion (rest a) (rest b))))))
(actual-recursion l1 l2))))
这样每次递归调用都不会创建 ?x
的新绑定(bind)。
关于recursion - 让递归调用多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26371601/