APL/J言語では式は右から評価して行きます。これによって、いろんなことが簡単になっています。それはあちこちに書いてありますので、ここではひとまずおいて、演算の順序と言えば、逆ポーランド記法というのがありました。HP電卓などに入っていたもので、とても便利だったのですが、これが式をスタックに入れていって、演算子が現れると、スタック内の数字を消化しながら前に進むので、言ってみれば左から評価していくものでした。逆ポーランドと呼ばれるので、右左逆なら、ひょっとするとAPL/J言語はポーランド記法なのではないかと思い、調べました。結果的にはまったく違います。むしろ、APL/J言語は逆ポーランド記法に近いかもしれません。
1 + 2 = 3 (0 + 5) × (2 + 3) = 25 1 + 2 + 3 + 4 = 10
これをポーランド記法では次のようになります。
+ 1 2 × + 0 5 + 2 3 + 1 2 3 4
逆ポーランド記法だと次のようになると思います。
1 2 + 0 5 + 2 3 + × 1 2 3 4 + + +
さて、APL/J言語です。
1 + 2 3 (0 + 5) * (2 + 3) 25 (0 + 5) * 2 + 3 25 1 + 2 + 3 + 4 10
ここまではあまり面白くありません。ポーランド記法だとLispのにおいがして素敵ですし、逆ポーランド記法だと頭の中でスタック操作をすると、わかりやすくてこれもかっこいいです。APL/J言語ではかっこはなくならないし、よく考えないと間違えそうだし、いいことなさそうです。
しかし、例によって実験です。APL/J言語は実験が楽しい。数学(算数)の醍醐味みたいなものがあります。
+/ 1 2 NB.ポーランド記法みたいなこともできます 3 +/ 1 2 3 4 10 a * b [ a=.0 + 5 [ b=. 2 + 3 NB.スタックみたいなこともできますが 25 2 2$0 5 2 3 NB.マトリックスで考えるのがAPL/J風です 0 5 2 3 +/ (2 2$0 5 2 3) NB.足し算は次元を考えないと思った結果になりません 2 8 +/"1 (2 2$0 5 2 3) NB.クオートで次元を指定します 5 5 */ +/"1 (2 2$0 5 2 3) NB.その結果を掛ければOk 25
もっと色んなことができそうですが、きょうはこれまで。