我来自函数式编程背景,首先考虑的是问题的递归解决方案,而不是迭代解决方案。我开始使用Rebol (特别是R3),并使用带有累加器的尾递归函数为原始因子kata编写了一个解决方案。但是只要有足够大的输入,我就会破坏堆栈。我为Rebol2提供了一个名为“tail-func.r.r”的脚本,它实现了AFAIK尚未移植到R3的尾调用优化版本。我知道在许多情况下,Rebol 3的实现方式与R2不同,那么是否有一种方法可以在没有任何额外代码的情况下在Rebol 3中实现TCO?如果没有,是否有更简单的方法来获得它而不移植旧脚本?
编辑以添加我的代码:
primefactors: function [n m factors] [
either n > 1
[ either (modulo n m) == 0
[ primefactors (n / m) m (append factors m) ]
[ primefactors n (m + 1) factors ] ]
[ factors ]
]
primefactors 30 2 (copy []) => [2 3 5]发布于 2014-03-05 03:44:34
没有密码就不行抱歉。Rebol没有被编译,因此无法提前确切地知道什么构成了尾部调用。甚至对return函数的调用也会在调用堆栈上传播,但不会通过goto进行。
IIRC作者现在在Rebol 3上工作,不管他是否这么做,移植应该很容易。既然你提到了,我就去看看。函数生成器和预处理程序在Rebol中很容易实现。
https://stackoverflow.com/questions/22187853
复制相似问题