我来自函数式编程背景,首先考虑问题的递归解决方案,而不是迭代解决方案。我开始与Rebol一起工作(特别是R3),并使用带累加器的尾递归函数编写了质数因子kata的解决方案。但是如果有足够大的输入,我就会感到失望。我有一个Rebol2脚本,称为“ tail-func.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]
并非没有代码,对不起。Rebol尚未编译,因此无法提前知道到底是什么构成尾叫。甚至对return
函数的调用也可以快速传播回调用堆栈,但不能通过goto传播。
IIRC的tail-func的作者现在正在Rebol 3上工作,无论他是否这样做都应该很容易移植。现在您提到了,我来看一下。函数生成器和预处理器在Rebol中很容易实现。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句