相关疑难解决方法(0)

从Lisp中的递归函数调用堆栈溢出

我正在从Conrad Barski的"Lisp之乡"一书中学习Lisp.现在我遇到了我的第一个绊脚石,作者说:

以这种方式调用自己不仅允许在Lisp中使用,而且经常受到强烈鼓励

在显示以下示例函数以计算列表中的项目之后:

(defun my-length (list)
  (if list
    (1+ (my-length (cdr list)))
    0))
Run Code Online (Sandbox Code Playgroud)

当我my-length用包含一百万个项目的列表调用此函数时,我收到堆栈溢出错误.因此,无论你休想有一个列表,长期在Lisp的(所以也许我用例是没用的),或者还有另一种方法来计算在这么长的列表项.你能否对此有所启发?(顺便说一句,我在Windows上使用GNU CLISP).

lisp clisp tail-recursion common-lisp land-of-lisp

9
推荐指数
3
解决办法
8142
查看次数

标签 统计

clisp ×1

common-lisp ×1

land-of-lisp ×1

lisp ×1

tail-recursion ×1