让我们在递归中多次调用

时间:2014-10-14 22:40:25

标签: recursion lisp common-lisp let

我试图在递归函数中声明一个局部变量,但是每次函数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
           ))))

1 个答案:

答案 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的新绑定。