APL/J言語:{(左ブレイス、左波かっこ、カタログ、フロム)

APL/J言語:{(左ブレイス、左波かっこ、カタログ、フロム)


{(左ブレイス、左波かっこ、カタログ){yのように単項動詞として使われると、yの各ボックスの要素同士の組合せのカタログを作成する。その結果、通常作成されるカタログは$yのシェイプである。

   { 'ht';'ao';'gtw'
 +---+---+---+
 |hag|hat|haw|
 +---+---+---+
 |hog|hot|how|
 +---+---+---+
 +---+---+---+
 |tag|tat|taw|
 +---+---+---+
 |tog|tot|tow|
 +---+---+---+

デカルト積(行列のすべての組合せ)は{(左ブレイス、左波かっこ、カタログ)を使うことにより、容易に生成される。

   CP=: {@(,&<)
   0 1 CP 2 3 4
 +---+---+---+
 |0 2|0 3|0 4|
 +---+---+---+
 |1 2|1 3|1 4|
 +---+---+---+

二項動詞として使われる場合、xが-n=: #y to n-1の範囲の整数ならば、x{yはyからn|x(xをnで割った余り)の要素を選び出す(したがってフロム)。

   2 0 _1 _3 { 'abcdefg'
cage
   t=:3 4$'abcdefghijkl'
   1{t
efgh

xがボックスの場合、>xがyの軸に沿った形の要素のリストならば、yから該当する要素を選び出す。
さらに、もし選択に用いられたr=:>j{>xのいずれかがボックスだった場合、選択は>rでない軸にそってなされる。
最後の二項動詞としての例、すなわち(<<< _1){mは最後の要素以外のものを選択する。

   t=: 3 4 $ 'abcdefghijkl'
   t; (1{t); (2 1{t); (1{"1 t); ((,1){"1 t); (2 1{"1 t)
 +----+----+----+---+-+--+
 |abcd|efgh|ijkl|bfj|b|cb|
 |efgh|    |efgh|   |f|gf|
 |ijkl|    |    |   |j|kj|
 +----+----+----+---+-+--+
   t; (2 0{t); ((<2 0){t); ((2 0;1 3){t); ((<2 0;1 3){t)
 +----+----+-+--+--+
 |abcd|ijkl|i|ih|jl|
 |efgh|abcd| |  |bd|
 |ijkl|    | |  |  |
 +----+----+-+--+--+
   (_1{m); (_1{"2 m); (_1{"1 m); (<<< _1){m=:i.2 3 4
 +-----------+-----------+--------+---------+
 |12 13 14 15| 8  9 10 11| 3  7 11|0 1  2  3|
 |16 17 18 19|20 21 22 23|15 19 23|4 5  6  7|
 |20 21 22 23|           |        |8 9 10 11|
 +-----------+-----------+--------+---------+