単項動詞と二項動詞。
動詞は2種類の定義があります。一つは引数が一つだけの単項の場合(monadic)で、もう一つは引数が二つの2項の場合(dyadic)です。もし動詞の左側に妥当な引数が供給されると、二項動詞の定義が使われます。妥当な引数とは、それ自身が接続詞の引数でない名詞のことです。それ以外の場合は単項動詞の定義が適用されます。
また単項動詞としての動詞はモナド(monad)と呼ばれます。%4とした場合モナド%が使われています。3%4とすると、二項動詞(dyad)が使われています。単項動詞、二項動詞とも空ドメインを持つことができます。
動詞のランク。
動詞のランクの概念は名詞のランクと密接に関係しています。動詞のランクkは引数のkセルの一つ一つに作用します。次の例はセクションAのb配列を用いています。
b=:2 3 4 $ 'abcdefghijklmnopqrstuvwx' ,b abcdefghijklmnopqrstuvwx ,"2 b abcdefghijkl mnopqrstuvwx ,"_1 b abcdefghijkl mnopqrstuvwx
動詞,(カンマ、ラベル)は引数全体に作用するので、動詞,(カンマ、ラベル)のランクは無限(unbounded)ですが、ランク接続詞"(ダブルクオート、ランク接続詞)を用いて,"2のように使うと、ランク2に作用する動詞となり、2セル同士をラベルする動詞となります。その結果、作られる配列は2 x 12のシェイプになります。
結果のシェイプは動詞が作用するセルのフレームについて、動詞をそれぞれのセルに作用された結果のシェイプに連結(catenate)したものになります。通常、それぞれのシェイプは同一ですが、違う場合は、まず最初にランクに低い方に軸を追加することにより同一のランクにして、それからフィルエレメント(充填要素)を付け加えることにより、同一のシェイプにします。フィルエレメントとしては文字列ならばスペース、数字ならば0(ゼロ)、ボックスの配列ならば空のボックスが使われます。
i."0 s=: 2 3 4 0 1 0 0 0 1 2 0 0 1 2 3 >'I';'was';'here' I was here
二項動詞としては左の引数と右の引数のふたつのランクを扱います。
p=: 'abc' q=: 3 5$'wake read lamp ' p,"0 1 q awake bread clamp
最後に、動詞はすべて内部的に3つのランクを持っています。すなわち、単項動詞の場合の時のランク、それから二項動詞の時の左側のランクと右側のランクです。動詞の定義時に必要なのはセルに対しての内部ランクの動きだけで十分で、より大きなランクの引数に対する動きは自動で拡張されます。動詞のランクは単に作用するセルのランクの上限を設定しているだけです。引数のドメインのランクがそれ以下ならば問題ありません。たとえば%.(パーセントドット、逆行列、マトリックスインバース)は単項動詞としてのランクは2ですが、ベクトルを引数として与えると1列だけのマトリックスとして作用します。
アグリーメント(一致)。
フレーズp v qにおいて、動詞vの引数は、一方のフレームが他方のプレフィックスになるというような意味で一致する必要があります。上記の例ではp,"0 1 qが一致の例です。以下にさらに例を示します。
p ,"1 1 q abcwake abcread abclamp 3 4 5 * i. 3 4 0 3 6 9 16 20 24 28 40 45 50 55 (i.3 4) * 3 4 5 0 3 6 9 16 20 24 28 40 45 50 55
フレームが0(ゼロ)を含む場合、動詞はフィルのセルに作用します。以下の例を見て下さい。
($ #"2 i. 1 0 3 4);($ 2 3 %"1 i. 0 2) +---+---+ |1 0|0 2| +---+---+ ($ $"2 i. 1 0 3 4);($ 2 3 %/"1 i. 0 4) +-----+-----+ |1 0 2|0 2 4| +-----+-----+