(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左右)时,我遇到了最大递归深度错误。
是否有一个类似的内置功能没有遇到这个问题,或者我必须自己提出一个尾递归的等价物?
答案 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
有明显的非尾递归行为,这有点令人不安。