【发布时间】:2013-02-22 12:48:12
【问题描述】:
我正在从康拉德·巴尔斯基 (Conrad Barski) 的《Lisp 之国》一书中学习 Lisp。现在我遇到了我的第一个绊脚石,作者说:
这样称呼自己不仅在 Lisp 中是允许的,而且经常是 强烈鼓励
在展示了以下示例函数来计算列表中的项目之后:
(defun my-length (list)
(if list
(1+ (my-length (cdr list)))
0))
当我使用包含一百万个项目的列表调用此函数 my-length 时,我收到堆栈溢出错误。因此,要么您永远不会期望在 Lisp 中有这么长的列表(所以也许我的用例没用),或者还有另一种方法可以计算如此长的列表中的项目。你能对此有所启发吗? (顺便说一下,我在 Windows 上使用 GNU CLISP)。
【问题讨论】:
-
> 所以要么你永远不会期望在 Lisp 中有这么长的列表 你知道有一个
length函数,对吧?这就是为什么你打电话给你的my-length。
标签: lisp common-lisp tail-recursion clisp land-of-lisp