演算の順序

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

もっと色んなことができそうですが、きょうはこれまで。