APL/J言語:動詞の連続(トレイン)

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