在J

时间:2016-03-04 19:54:02

标签: j

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

 a + i. (b - a - 1)

成功!我想。现在,转换为动词的“简单”任务摆在我面前。这是我现在的问题。我在动词a的两边调用+(左参数)。我想过使用evoke,但我不确定如何使它工作。

所以我的问题是:如何将形式a f (a g b)或更具体地a f (a g b h c)(和类似形式)的表达式转换为纯动词?我不想使用明确的论点,因为它有什么乐趣? ;)

编辑我的解决方案如下:

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

1 个答案:

答案 0 :(得分:5)

要将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