Rebol尾巴呼叫优化
我来自一个函数式编程背景,首先考虑问题的递归解决方案,而不是迭代解决方案。 我开始使用Rebol(特别是R3),并使用带累加器的尾递归函数为主因子kata写了一个解决方案。 但是如果有足够大的输入,我会吹出堆叠。 我有一个名为“tail-func.r”的Rebol2脚本,它实现了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]
不是没有代码,对不起。 Rebol没有编译,因此无法提前知道构成尾部呼叫的内容。 即使对return
函数的调用也能快速传回备用调用堆栈,但不能通过goto。
IIRC的尾巴func的作者现在在Rebol 3上工作,他是否应该很容易移植。 现在你提到它,我会看看。 函数发生器和预处理器很容易在Rebol中完成。
链接地址: http://www.djcxy.com/p/19275.html