我正在从Conrad Barski的书“Lisp的土地”学习Lisp。现在,我已经打了我的第一个拦路虎,在这里笔者说:Lisp中递归函数调用的堆栈溢出
以这种方式调用自己是不是只允许在Lisp的,但往往是 显示下面的例子功能后,大力鼓励
算在列表中的项目:
(defun my-length (list)
(if list
(1+ (my-length (cdr list)))
0))
当我调用该函数my-length
含一百万的项目清单,我得到一个堆栈溢出错误。所以要么你永远不会期望在Lisp中有很长的列表(所以也许我的用例是无用的),或者有另一种方法来计算这样一个长列表中的项目。你能否对此有所了解? (顺便说一句,我在Windows上使用GNU CLISP)。
http://docs.racket-lang.org/guide/Lists__Iteration__and_Recursion.html – 2013-03-07 11:03:40
> *所以,要么你就休想有一个长的Lisp *你知道,有一个'length'功能列表, 对?这就是为什么你叫你'我的长度'。 – Kaz 2017-05-24 19:24:24