在 J 中制作范围动词

Making a range verb in J

J 是我决定学习的一种很棒的编程语言。作为一个简单的练习,我决定模拟一个范围。有一个内置函数 i. 可以创建范围 0..i-1。使用一些数学方法,我知道这是 ab:

之间的范围
 a + i. (b - a - 1)

成功!我心想。现在,"simple" 转换为动词的任务摆在了我的面前。这是我现在的问题。我在动词 + 的两边都调用了 a(左边的参数)。我想过使用 evoke,但我不确定如何让它发挥作用。

所以我的问题是:如何将 a f (a g b) 或更具体地说 a f (a g b h c)(以及类似形式)形式的表达式转换为纯动词?我不想使用显式参数,那有什么乐趣呢? ;)

编辑 我的解决方案是这样的:

range =: [(+i.)>:@-~

要将 x f (x g y) 形式的表达式转换为 x h y 形式,您可以使用二元分叉:

x (F G H) y = (x F y) G (x H y)

和身份动词:x [ y = x,制作:

x ([ f g) y  = (x [ y) f (x g y) = x f (x g y)

所以你要找的动词是h =: [ f g