私は、Jで算術平均を行うこの方法に精通しています:
+/ % #
しかし、ここでは次のようにも示されています
# %~ +/
これら 2 つのバージョンは交換可能ですか?
ダイアディック~
は、動詞の引数を逆にします。x f~ y
と同等y f x
です。~
動詞の引数を逆にしたいときに使用します。
その最も一般的な用途の 1 つは、フォークとフックの構成です。たとえば、必要なときに使用できるため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
ます。
これが便利な場所の 1 つは、作業中の行の結果をチェックすることです。おそらくもっと複雑なものをテストしていると思われますが、最後の行を繰り返し、何も並べ替えたり括弧を追加したりせずに左側に追加するだけで、自分で確認できます。
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
単項~
は「反射」副詞であり、修飾された動詞を2項として動作させ、左と右の両方の単一の引数を複製します。これは引数を整理するためのもう 1 つの近道ですが、dyadic とはかなり異なり~
ます。*~ 4
は16
、それ自体で乗算y
しているためです ( y * y
)。