2013-05-04 69 views
0
(filter even? (numb-2tx 100000)) 

;Aborting!: maximum recursion depth exceeded 
;;numb-2tx generates a list from 2 to x, even for very large values of x (tested with 2000000) 

當我嘗試將過濾函數應用於非常長的列表(> 40,000左右)時,我遇到了最大遞歸深度錯誤。Mit-scheme,帶內置過濾函數的遞歸錯誤

有沒有類似的內置,不會遇到這個問題,或者我將不得不拿出一個我自己的尾遞歸等價物?

回答

1

啓動MIT方案並選擇--stack選項。就像這樣:

$ mit-scheme --stack 10000 

這裏是我的結果與外的現成的堆棧,並與堆棧的1000:

> (length (filter even? (iota 1000000))) 

;Aborting!: maximum recursion depth exceeded 

然後,使用--stack 10000後:

> (length (filter even? (iota 1000000))) 

;Value: 500000 

知道filter有明顯的非尾遞歸行爲,這有些令人不安。