我正在從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