具有内置滤波器功能的Mit方案,递归错误

时间:2013-05-04 01:04:23

标签: filter scheme

(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左右)时,我遇到了最大递归深度错误。

是否有一个类似的内置功能没有遇到这个问题,或者我必须自己提出一个尾递归的等价物?

1 个答案:

答案 0 :(得分:1)

使用--stack选项启动MIT Scheme。像这样:

$ 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有明显的非尾递归行为,这有点令人不安。