在 J 中制作范围动词
Making a range verb in J
J 是我决定学习的一种很棒的编程语言。作为一个简单的练习,我决定模拟一个范围。有一个内置函数 i.
可以创建范围 0..i-1
。使用一些数学方法,我知道这是 a
和 b
:
之间的范围
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
J 是我决定学习的一种很棒的编程语言。作为一个简单的练习,我决定模拟一个范围。有一个内置函数 i.
可以创建范围 0..i-1
。使用一些数学方法,我知道这是 a
和 b
:
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