让我们在递归中多次调用

Pro*_*mer 2 lisp recursion common-lisp let

我试图声明一个局部变量在递归函数中使用,但我的let似乎每次函数recurses时调用.我希望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
           ))))
Run Code Online (Sandbox Code Playgroud)

Ina*_*thi 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))))
Run Code Online (Sandbox Code Playgroud)

这样每次递归调用都不会创建新的绑定?x.