我正在从Conrad Barski的书《Lisp之国》中学习Lisp。现在我遇到了第一个难题,作者说:
当我使用包含一百万项的列表调用这个函数
在Lisp中,这种自我调用不仅是被允许的,而且经常会受到强烈的鼓励。
在展示了以下计算列表项数目的示例函数后:
(defun my-length (list)
(if list
(1+ (my-length (cdr list)))
0))
当我使用包含一百万项的列表调用这个函数
my-length
时,会出现堆栈溢出错误。所以,要么你从不指望在Lisp中有那么长的列表(所以也许我的用例是无用的),要么就有另一种方法来计算这么长的列表中的项目数。你能否为此提供一些帮助?(顺便说一下,我在Windows上使用GNU CLISP)。
length
函数,对吧?所以你才叫你自己的函数为my-length
。因此,你要么从未预料到会有这么长的列表,要么就是故意不使用基础函数。 - Kaz