【发布时间】:2019-11-29 19:04:55
【问题描述】:
我对 J 编程语言比较陌生,我对 J 中的等效默认表达式有疑问。
我找到了两行等效的 J,但代码中的连词 (^:) 的参数是使用括号运算符切换的。
我主要是想知道这个表达方式:
u ^: x y
等价于这个表达式:
x u @] ^: [ y
感谢任何 J 程序员解释这两者是如何等价的。
【问题讨论】:
标签: j tacit-programming
我对 J 编程语言比较陌生,我对 J 中的等效默认表达式有疑问。
我找到了两行等效的 J,但代码中的连词 (^:) 的参数是使用括号运算符切换的。
我主要是想知道这个表达方式:
u ^: x y
等价于这个表达式:
x u @] ^: [ y
感谢任何 J 程序员解释这两者是如何等价的。
【问题讨论】:
标签: j tacit-programming
我认为看待这个的方式是将默认表达u@] ^: [看成是由^:在两个动词u@]和[之间的连词形成的动词。 u@] 将采用右参数y(排除左参数)并将u 的一元形式应用于y。 [ 将使用左侧参数 x 作为值,该值将提供 u 的重复次数作为 ^: 的运算符。
对于显式版本,u ^: x y 将 [ 和 ] 动词替换为其关联的左右参数,并且由于 x 是 ^: 的运算符,u ^: x 实际上是一个单子动词y 作为它的参数。
让我们设置
a=. 3
b=. 4
vb =. +: NB. double
vb ^: a b
32
a vb @] ^: [ b
32
a (vb @] ^: [) b NB. expression within parenthesis is clearly a verb
32
【讨论】: