APL/J言語:句読点(パンクチュエーション)

英語では、文やフレーズをどの順序で解釈するかを示すために句読点が用いられます。

   The teacher said he was stupid.
   The teacher, said he, was stupid.

数学は主にかっこを用いて解釈の順序を示し、実行順序と呼ばれます。かっこだけでなく、関数(演算子)に実行順序があって、たとえば累乗(べき乗、冪乗、指数)は掛け算よりも先に実行されるし、掛け算は足し算より先に実行される。

J言語はかっこを用いる他、次のルールがある。
1.動詞の右側すべてのフレーズの値がその動詞の引数である
2.副詞が先に実行される。したがって、a */ bはa (*/) bであってa(*/b)ではない

この辺へんな言い回しをしていますが、きっと意味があるのでしょう。フツーはJ言語では演算はかっこがない場合右からやる、という言い方をします。副詞の話も変な話で、a+bはa(+b)ではないと言っているように見えます。当たり前のことを言っているように見えます。

   a=:5
   b=:3
   (a*a)+(b*b)
34
   a*a+b*b
70
   a*(a+(b*b))
70
   (a+b)*(a-b)
16
   a (+*-) b
16

最後の分は(+*-)という独立したフレーズを使っている。これはフォーク(fork)と呼ばれ、その上の文(a+b)*(a-b)と同じ意味である。
フォークは単項動詞としての意味もあり、以下のmean(平均)という動詞で説明する。

   c=:2 3 4 5 6
   (+/ % #) c  NB.#は引数の要素数を返す
4
   (+/c)%(#c)
4

演習:
4.1 数学では3x^4+4x^3+5x^2という表現は多項式と呼ばれる。xが2の場合の式の値を評価するために下記を実行せよ。

   x=:2
   (3*x^4)+(4*x^3)+(5*x^2)
100

4.2 数学においては関数(演算子)の実行順序が定められているおかげで多項式を表すのにかっこが不要である。J言語においてかっこなしで同様の意味になるように文を書け。

   +/ 3 4 5 * x ^ 4 3 2
100

つまり、多項式の係数3 4 5をcとして、冪乗の指数4 3 2をeとすると、+/c*x^e
ということである。

   c=:3 4 5
   e=:4 3 2
   +/c*x^e
100

以上