算术平均向前还是向后?

Arithmetic mean forwards vs backwards?

我熟悉这种在 J 中进行算术平均的方法:

+/ % #

但它也here显示为

# %~ +/

这两个版本可以互换吗?如果不能互换,我应该什么时候使用其中一个版本?

Dyadic ~ 反转动词的论元。 x f~ y 等同于 y f x。当你,嗯,想要反转动词的参数时,你可以使用 ~

它最常见的用途之一是 forks 和 hooks 组合。例如,因为 y f (g y)(f g) y 您可以在需要 (g y) f y.

时使用 ((f~) g) y

Dyadic ~ 是 "Passive" 副词,它交换左右参数。因此 x f~ yy 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 ~ 是 "Reflex" 副词,它使修饰的动词作为二元组运行,为左和右复制单个论元。虽然这是安排你的论点的另一个捷径,但它与二元 ~ 完全不同。 *~ 416,因为您将 y 乘以自身 (y * y)。

在反向均值示例中,我没有真正看到一种方法比另一种方法更有效的原因(V V V 形式的分叉),但是因为 J 中的分叉可以是非对称的(在 N V V 形式中) ) 我可以看到一些原因,将叉子的中间齿倒转是一个优势。举个例子:

   (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