我熟悉在 J 中做算术平均值的这种方式:
+/ % #
但这里也显示为
# %~ +/
这两个版本是否可以互换,如果不能,我应该什么时候使用一个与另一个?
Dyadic~
颠倒动词的论点。x f~ y
相当于y f x
。当你~
,嗯,想要反转动词的参数时使用。
它最常见的用途之一是用于叉子和钩子的组合。例如,因为您可以在需要时y f (g y)
使用.(f g) y
((f~) g) y
(g y) f 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是~
“反射”副词,它使修饰的动词作为一个二元组来操作,为 left 和 right 复制单个参数。虽然这是安排你的论点的另一个捷径,但它与二元法完全不同~
。*~ 4
是16
,因为你在乘以y
它自己 ( y * y
)。