APL/J言語:動詞の連続(トレイン)
(+ */)のような特殊な連続(シークエンス)は、"通常"の構文解析ルールでは部分部分に分け
ることができません。このようなものはトレインと呼ばれ以下のように解釈されます。
2つもしくは3つの動詞の連続(トレイン)は動詞です。また、解釈を重ねることによりさらに大きな数
の動詞の連続(トレイン)による動詞が作成できます。たとえば、+-*%や+-*%^は、(-*%)や+
- (*%^)と同等です。連続(トレイン)による動詞の生成方法は下記のダイヤグラムで定義されま
す。下記のダイヤグラムで、f g hが動詞、x yは引数です。2つの動詞の連続(トレイン)はフッ
ク(hook)と呼ばれ、3つの動詞の連続(トレイン)はフォーク(fork)と呼ばれます。
HOOK FORK CAPPED FORK g g g g g g / \ / \ / \ / \ | | y h x h f h f h h h | | | | / \ / \ | / \ y y y y x y x y y x y
たとえば、5(+*-)3は(5+3)*(5-3)です。フォークでf g hのfにあたる動詞がキャップ([:)の場合、gはhの結果を引数とする単項動詞となるので、g h yもしくはg x h yというように単純化されます。
N g hという連続(トレイン)は、名詞のあとに動詞が2つ続いているものでN"_ g hと同等です。
フックとフォークのランクは無限です。
名詞や動詞と連結詞(conjunction)の2つの連続(トレイン)で副詞になります。例えば&.>は"each"と呼ぶのがふさわしいような副詞です。副詞bc=:<"はセルのボックス化("box cells")の役割をします。例えば0 bc xはxのアトムをボックスにします。
最後に、2つの副詞の連続(トレイン)は副詞を作ります。従って、副詞はいくつ並べても副詞ということになります。たとえば、/\はインサートスキャンとでも呼ばれるような副詞です。また~/~は自己参照テーブル("commuted table")と呼ぶのがふさわしいような副詞です。
is=:/\ NB.インサートスキャン + is 1 2 3 4 5 1 3 6 10 15 ct=: ~/~ NB.コミューテッドテーブル - ct 1 2 3 0 1 2 _1 0 1 _2 _1 0