在J中制作范围动词

Con*_*ien 4 j

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

 a + i. (b - a - 1)
Run Code Online (Sandbox Code Playgroud)

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

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

编辑我的解决方案如下:

range =: [(+i.)>:@-~
Run Code Online (Sandbox Code Playgroud)

Eel*_*vex 5

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

x (F G H) y = (x F y) G (x H y)
Run Code Online (Sandbox Code Playgroud)

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

x ([ f g) y  = (x [ y) f (x g y) = x f (x g y)
Run Code Online (Sandbox Code Playgroud)

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

  • [返回两个参数的左边,]返回两个参数的右边.所以a [b返回a和a] b返回b.它们在J中不用作方括号对,而是用作左右操作符.它需要一点点习惯,但在概念上并不困难. (4认同)
  • 我对J一无所知,但那些未封闭的方括号让我感到不舒服. (2认同)