小编tey*_*yvk的帖子

Rebol尾调用优化

我来自函数式编程背景,首先考虑问题的递归解决方案而不是迭代解决方案.我开始使用Rebol(特别是R3),并使用带累加器的尾递归函数为primefactor 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]
Run Code Online (Sandbox Code Playgroud)

recursion rebol tail-call-optimization rebol3

7
推荐指数
1
解决办法
229
查看次数

J中的数组:从一个索引到另一个索引

使用JI正在尝试执行类似于Bernard Legrand(2009)的Mastering Dyalog APL第128页上显示的以下示例的操作。我无法找到此代码到J的直接转换,这就是我想要的。

这是示例:

BHCodes ? 83 12 12 83 43 66 50 81 12 83 14 66 etc...
BHAmounts ? 609 727 458 469 463 219 431 602 519 317 663 631...
Run Code Online (Sandbox Code Playgroud)

13.3.2-第一个问题

我们将重点放在某些选定的国家(14、43、50、37和66)上,并计算其销售总额。首先让我们确定BHCode的哪些项目是相关的:

      Selected ? 14 43 50 37 66
      BHCodes  ? Selected
0 0 0 0 1 1 1 0 0 0 1 1 0 1 0     ? Identifies sales in the selected countries only.
Run Code Online (Sandbox Code Playgroud)

然后,我们可以将此过滤器应用于金额,并将其相加:

     (BHCodes ? Selected) / BHAmounts
463 219 431 …
Run Code Online (Sandbox Code Playgroud)

lookup filtering j apl dyalog

3
推荐指数
1
解决办法
178
查看次数

标签 统计

apl ×1

dyalog ×1

filtering ×1

j ×1

lookup ×1

rebol ×1

rebol3 ×1

recursion ×1

tail-call-optimization ×1