Rebol尾叫优化

特维克

我来自函数式编程背景,首先考虑问题的递归解决方案,而不是迭代解决方案。我开始与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]
布莱恩·H

并非没有代码,对不起。Rebol尚未编译,因此无法提前知道到底是什么构成尾叫。甚至对return函数的调用也可以快速传播回调用堆栈,但不能通过goto传播。

IIRC的tail-func的作者现在正在Rebol 3上工作,无论他是否这样做都应该很容易移植。现在您提到了,我来看一下。函数生成器和预处理器在Rebol中很容易实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Pharo是否提供尾叫优化?

来自分类Dev

可以优化尾叫吗?如果是这样,没有发生的特殊原因是什么?

来自分类Dev

可以优化尾叫吗?如果是这样,没有发生的特殊原因是什么?

来自分类Dev

什么叫最优化算法?

来自分类Dev

gfortran支持尾叫消除吗?

来自分类Dev

gfortran支持尾叫消除吗?

来自分类Dev

Rebol尾部呼叫优化

来自分类Dev

为什么DrRacket似乎将其识别为尾叫?

来自分类Dev

布尔AND的C尾调用优化

来自分类Dev

在Java中尾调用优化

来自分类Dev

如何应用尾调用优化

来自分类Dev

局部变量和尾调用优化

来自分类Dev

比赛中的Scala尾递归优化

来自分类Dev

F#中的尾调用优化

来自分类Dev

递归和尾调用优化示例

来自分类Dev

GCC不会尾调用优化递归函数

来自分类Dev

递归方程中的尾调用优化

来自分类Dev

在JavaScript中封装尾调用优化的实用程序?

来自分类Dev

Python中的尾递归优化装饰器

来自分类Dev

关于JSLint,它不喜欢for循环和尾调用优化

来自分类Dev

尾递归优化:为什么'+'不允许这样做?

来自分类Dev

NVCC 和 NVRTC 是否支持尾调用优化?

来自分类Dev

阶乘尾调用优化 (TCO) 的延续风格实现了吗?

来自分类Dev

什么叫“-”?

来自分类Dev

为什么不能在基于JVM的Lisps中优化尾调用?

来自分类Dev

Erlang:具有未优化尾调用的递归功能的stackoverflow吗?

来自分类Dev

ES6尾调用优化是否涵盖生成器?

来自分类Dev

在C和Haskell的相互递归中编译尾调用优化

来自分类Dev

为什么不能在基于JVM的Lisps中优化尾调用?