ここ数週間、私は J を勉強してきましたが、私を本当に悩ませているのは、#
演算子の 2 項の場合です: 私がまだそれを使用した唯一の方法は、次のようなものです:
(1 p: a) # a
これを逆にすると、括弧を省略できます。
a #~ 1 p: a
現在の議論の逆を取らないように選択されたのはなぜですか? APL に慣れていないのか、それとも完全に見落としているのか?
ここ数週間、私は J を勉強してきましたが、私を本当に悩ませているのは、#
演算子の 2 項の場合です: 私がまだそれを使用した唯一の方法は、次のようなものです:
(1 p: a) # a
これを逆にすると、括弧を省略できます。
a #~ 1 p: a
現在の議論の逆を取らないように選択されたのはなぜですか? APL に慣れていないのか、それとも完全に見落としているのか?
一般に、J のプリミティブは、右側に「プライマリ データ」、左側に「制御データ」を受け取るように設計されています。
「一次」データと「対照」データの区別は明確ではありませんが、一般的に「一次」データは「対照」データより頻繁に変化すると予想されます。つまり、「コントロール」データは「プライマリ」データよりも計算される可能性が低いと予想されます。
その設計選択の理由は、まさにあなたが指摘したとおりです。(高度に固定されているのではなく) 計算される可能性が高いデータが右側に表示される場合、より多くの J フレーズを単純なトレインまたはパイプラインとして表現できるためです。過度の括弧なしの動詞 (J が左から右に実行された場合)。
では、 の場合#
、どちらのデータが計算される可能性が高いでしょうか? フィルター (またはマスク) が計算される可能性が非常に高いことは 100% 正しいです。ただし、フィルタリングされるデータはほぼ確実に計算されます。a
たとえば、どこで入手しましたか?
QED。
PS: のようにa
J 動詞で計算できる場合a=: ...
、結果全体、フィルター、およびすべてを で表すことができますprimeAs =: 1&p: # ...
。
PPS: に注意してください1&p:
。これは「コントロール」と「プライマリ」の別の例です。これ1
はコントロール データであり、永久にバインドされているため、p:
固定されています。そのため、偶然にも、それを左の引数p:
として受け取るように設計されました。
PPPS: この「制御データが左側に表示される」という概念は、さまざまな方法で表現されてきました。http://www.jsoftware.com/pipermail/general/2007-May/030079.htmlで、ベテラン Jers の説明のまとめを見つけることができ ます。