首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rebol尾呼叫优化

Rebol尾呼叫优化
EN

Stack Overflow用户
提问于 2014-03-05 03:22:52
回答 1查看 262关注 0票数 7

我来自函数式编程背景,首先考虑的是问题的递归解决方案,而不是迭代解决方案。我开始使用Rebol (特别是R3),并使用带有累加器的尾递归函数为原始因子kata编写了一个解决方案。但是只要有足够大的输入,我就会破坏堆栈。我为Rebol2提供了一个名为“tail-func.r.r”的脚本,它实现了AFAIK尚未移植到R3的尾调用优化版本。我知道在许多情况下,Rebol 3的实现方式与R2不同,那么是否有一种方法可以在没有任何额外代码的情况下在Rebol 3中实现TCO?如果没有,是否有更简单的方法来获得它而不移植旧脚本?

编辑以添加我的代码:

代码语言:javascript
复制
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]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-05 03:44:34

没有密码就不行抱歉。Rebol没有被编译,因此无法提前确切地知道什么构成了尾部调用。甚至对return函数的调用也会在调用堆栈上传播,但不会通过goto进行。

IIRC作者现在在Rebol 3上工作,不管他是否这么做,移植应该很容易。既然你提到了,我就去看看。函数生成器和预处理程序在Rebol中很容易实现。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22187853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档