J 言語では記号が多用されます。角括弧 [ ]
や波括弧 { }
に至っては、「開く」「閉じる」の対応も無く、バラバラに使われます。また、<
<.
<:
のように .
や :
を繋げると別の機能を表し 1 、i.
のようにアルファベットも使われます。
(そのため、可読性が良くないと評されることが よくあります。)
J 言語が基本的な機能 (プリミティブ) を記号で表すのには、理由があります。
単に短く書けるというのも一つの利点ですが、それだけではありません。
もし、i.
(dyad) の代わりに index_of
という名前の verb が標準ライブラリに用意されていたとします。次のコードは何を実行するでしょうか。
3 7 2 index_of 7
本当に常に 3 7 2 i. 7
と同じ振る舞いをするでしょうか。同じファイルの中に固有の index_of
の定義があるかもしれませんし、別のライブラリの verb を使っているかもしれません。
J は静的型付けの言語ではないので、変数名は常に動的に解決されます。また、変数はミュータブルで、noun も verb も modifier も代入することができます。
記号が使われるのには、言語の中心的な機能と変数名が衝突してしまうことや、再代入が起きることを予防する意味があります。
さらに、これらの記号は文脈によらず 2「共通の語彙」の役割をするので、他人の書いたコードを読む上ではむしろ理解を手助けするものになります。
[ 目次 ]