函数和模数的J语法

mca*_*dre 3 syntax function j modulo

我正在尝试创建一个mod3返回输入模3 的函数,但我的语法错误.我不明白为什么语法double与文档中的示例有任何不同.

$ jconsole
   double =: * & 2
   double 1
2
   double 2
4
   double 3
6
   mod3 =: 3 | &
|syntax error
|   mod3=:    3|&
Run Code Online (Sandbox Code Playgroud)

Tik*_*anz 5

&(bond)用于将名词绑定到动词时,它实质上是创建一个带有"固定"左(或右)参数的新动词.因为乘法是可交换的,所以无论你是修正2左边还是右边的参数都没关系,所以以下是等价的:

   double1= *&2     NB. new verb "times by 2"
   double2=: 2&*    NB. new verb "2 times"
   double1 4
8
   double2 4
8
Run Code Online (Sandbox Code Playgroud)

但是residualule(|)不是可交换的,所以在你的情况下你必须确保你修复/绑定(3作为左边的参数|来获得所需的结果(数字的余数除以3).

   modulo3=: 3&|    NB. new verb "remainder after divison by 3"
   modulox=: |&3    NB. new verb "remainder of 3 divided by"
   modulo3 7
1
   modulox 7
3
Run Code Online (Sandbox Code Playgroud)

  • 确实,J句中的动词是从右到左执行的.还有从左到右执行修饰符的情况.另外,中缀可以被认为是中心J形式,前缀是动词的单参数异常,后缀是修饰符的单参数异常.由于`&`是一个修饰符,`3&|`是一个动词的中缀词.它不是动词`|`的后缀使用,因为`|`是`&`的参数.由"3&|"产生的整个动词在其右侧带有一个参数(例如7). (2认同)