我试图在递归函数中声明一个局部变量,但是每次函数recurses时我都会调用它。我希望let函数被调用一次来声明一个变量并给它赋值nil,然后我想在我的递归函数中更新这个局部变量的值而不用每个recurse擦除它。
这是我的代码的简化框架。
(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
))))
答案 0 :(得分:9)
你所写的正是你所说的你不想要的;递归函数内部的局部变量,应该在每次传递时更新它。如果我理解正确,你需要做一些像
这样的事情(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
的新绑定。