APL/J言語:ニーモニック

ニーモニックってなんだか懐かしい響きがあるな。昔機械語アセンブラのことをニーモニックって言ってなかったっけ? APL/J言語もあのころの理論を引きずっているのかもしれません。
Jディクショナリーでは<(小なり、レスザン)などのプリミティブは使ってみて、意味を予想して確認する、という勉強法を薦めています。しかし英語圏の人のようにはいかないよね。<(小なり、レスザン)はいいけれど<.(小なりドット)の意味はレッサーオブ(つまりミニマム)と言われてもレッサーオブなんて初めて聞く英語だったりします。別にJ言語で英語の勉強をしたいわけではないのに、勉強させられている感じ。ま、いいとしましょう。

   7<5   NB.小なり、Less than
0   NB.ゼロは真偽の偽(false)の意味
   7<.5   NB.小なりドット、Lesser of
5   NB.小さいほうの数字を返す。文字列は不可
   7>5   NB.大なり、Greater than
1   NB.1は真偽の真(true)の意味
   7>.5   NB.大なりドット、Greater of
7   NB.大きいほうの数字を返す。文字列は不可
   10^3   NB.^(カレット)は指数
1000
   10^.1000   NB.^.(カレットドット)は対数(ログ)
3
   7=5   NB.=(イコール)は同等性の真偽を返す
0
   b=: 5   NB.=:(イコールコロン、アサイン、コピュラ)は代入
   7<.b   NB.代入後は使える
5
   Min=: <.  NB.動詞を代入できる
   power=: ^
   gt=: >
   10 power (5 Min 3)   NB.5と3の小さいほう(3)だけ10をかける
1000

(演習:下記を試して考える)

   a=:0 1 2 3
   b=:3 2 1 0 
   a+b
3 3 3 3
   a*b
0 2 2 0
   a-b
_3 _1 1 3
   a%b
0 0.5 2 _
   a^b
0 1 2 1
   a^.b
0 _ 0 __
   ab
0 0 1 1
   (ab)
1 1 1 1
   (ab)
1 1 1 1

コメント:
マイナス(ネガティブ)は_3(アンダーバーさん)のように表す。演算子のマイナスと区別する。アンダーバーは小数点が数字の一部であるように数字の一部である。
割り算は%(パーセント)でゼロで割った場合は無限大になりアンダーバーで表現される。
1を底としたログ2は無限大であり、3を底としたログ0はマイナス無限大である。マイナス無限大はアンダーバーを二つつなげて表現する。
5<7は真であり、1を返す。ジョージ・ブールは同じような記法を用い、さらに+(プラス)をorの意味のブール型演算子とした。J言語では+.(プラスドット)を用いて通常の足すの意味の+(プラス)と区別する。

Min=: <.の例のようにすべてのプリミティブ(原始関数)に名前を考えてつけてみよ。

以上