ここでは,動詞についてのお話です。
一般的なプログラミング言語でいう関数にあたるものは,
Jでは"動詞"といいます。他にも変数と言わず"名詞"と言ったり,
私達がしゃべる言語と同様のいいかたをします。
動詞は単項動詞と2項動詞があります。
違いは,単項動詞は右側だけに引数を取るのに対して,
2項動詞は両側に引数を取ります。
しかし、動詞が2種類あると言うわけではなくて、
片側だけに取る使い方と、両側に取る使い方で、違いがあると言うことです。
具体例をみてみましょう。
前に2%3というのをやりました。J言語では%は、割算演算をするものです。
これは、%の両側にに数字があるので、%を2項動詞として使っていることになります。
この%を単項動詞として使うと、逆数の演算をします。
これをみるとわかるように、定義されていれば、右側だけに引数を取っても
何らかの動作をします。
他には、*を単項動詞で使うと、引数の符号を返します。
まぁ、動詞は非常に多くあるので、ひとつひとつの説明はいずれする予定です。
Jでは,右側から計算します。どういうことかというと、
9-4-7を計算すると、普通は-2ですが、Jでは12となります。
この仕組みは、9-(4-7)の計算をしているのです。
長くなっても、常に右側からです。通常の四則演算の優先順位は無視されます。
なので、2*3+4は、14になります。
ところで、Jでは、副詞もあります。代表的なものに、"/"があります。
これは、左側の動詞を数字の列にの間にひとつずつ入れていく副詞です。
a=:1 2 3 4 5 6 7 8 9
とすると、aには、(1,2,3,4,5,6,7,8,9)という列が代入されます。
このとき、
+/a
とすると、1+2+3+4+5+6+7+8+9という計算をします。便利ですね。
2章でやった例では、これをうまく利用しています。
では、もう少し難しい例をみてみましょう。
似たような例ですが、
-/a
の結果はどうなるでしょう?-43と思った人、まだまだです。
5だと思った人、あなたは、素晴らしい。
では、説明しましょう。
/は数字の間に動詞を入れます。なので、
1-2-3-4-5-6-7-8-9
となります。しかし、さらに、計算順序も考慮しないといけません。
つまり、これは、
1-(2-(3-(4-(5-(6-(7-(8-9)))))))
という計算をしているのです。
こう書くと複雑ですが、括弧を展開すると、
1+2-3+4-5+6-7+8-9
という計算になります。
短い計算でも、いろんな決まりごとがありますね。
とりあえず、計算は右から、ということを頭に入れておきましょう。
これを回避したいときには、括弧を使うとか、順番を入れ換えるなど、
工夫してみましょう。