【发布时间】:2015-08-19 07:32:55
【问题描述】:
【问题讨论】:
标签: j tacit-programming
【问题讨论】:
标签: j tacit-programming
二元 ~ 反转动词的参数。 x f~ y 等价于 y f x。当您想反转动词的参数时,您可以使用~。
它最常见的用途之一是用于叉子和钩子的组合。例如,因为y f (g y) 是(f g) y,所以您可以在需要(g y) f y 时使用((f~) g) y。
【讨论】:
在反向平均示例中,我真的看不出一种方法比另一种更有效的原因(VVV 形式的叉子),但是因为 J 中的叉子可以是非对称的(在 NVV 形式中)我可以看出一些原因,反转前叉的中间尖齿会是一个优势。举个例子:
(5 # $) 1 2 3 NB. (N V V) form
3 3 3 3 3
(5 #~ $) 1 2 3 NB. (N V~ V) becomes effectively (V V N)
5 5 5
($ # 5) 1 2 3 NB. (V V N) is a syntax error
|syntax error
| ($#5)1 2 3
【讨论】:
Dyadic ~ 是“被动”副词,它交换左右参数。因此x f~ y 与y f x 相同。 +/ % # 和 # %~ +/ 是等价的。 2 % 5 给你0.4,但2 %~ 5 给你2.5。
这可以很方便地检查您正在使用的行的结果。虽然您可能会测试更复杂的东西,但您可以通过重复最后一行并在左侧添加而不重新排列任何内容或添加括号来检查自己。
string =. 'J is beyond awesome.'
'e' = string
0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0
string #~ 'e' = string
eee
monadic ~ 是“反射”副词,它使修饰的动词作为一个二元组来操作,为左和右复制单个参数。虽然这是安排论点的另一个捷径,但它与二元 ~ 完全不同。 *~ 4 是 16,因为您将 y 自身相乘 (y * y)。
【讨论】: