recursion - 让递归调用多次

标签 recursion lisp common-lisp let

我试图声明一个在递归函数中使用的局部变量,但我的 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/

相关文章:

macros - Racket 中的 c(a|d)+r 宏

lisp - 为什么 TIME 报告的字节数因调用而异?

Javascript - 在递归函数结束时延迟返回 Promise

javascript - 按属性名称递归搜索对象中的值

无需循环查询的类别和子类别的 PHP 树结构

lisp - clisp中atoi对应的标准函数是什么?

谁能帮我用递归解决这个问题?

recursion - 使用递归时如何计算列表(或嵌套列表的列表)中的所有原子

output - FORMAT 函数调用中的 LISP 错误

lisp - 可以使用 find 在另一个列表中查找列表吗?