APL/J言語:斜め副詞オブリーク(/.)

APL/J言語:斜め副詞オブリーク(/.)
u/.yは、uという動詞をテーブルの要素を斜めに切り取って作用する。

   i.3 4
0 1  2  3
4 5  6  7
8 9 10 11
   </. i.3 4
 +-+---+-----+-----+----+--+
 |0|1 4|2 5 8|3 6 9|7 10|11|
 +-+---+-----+-----+----+--+

一般化して、u/.yはuをyの_2セルに作用させた結果である。yのランクが2よりも小さい場合は、yは,.yとして対処される。

m/.yは動名詞mからテーブルyの斜めの_2セルに動詞を連続して作用させるものである。必要に応じてmは繰り返し使われる。

   <`(<@|.) /. i.3 4
 +-+---+-----+-----+----+--+
 |0|4 1|2 5 8|9 6 3|7 10|11|
 +-+---+-----+-----+----+--+

テーブルの対角線(ダイアゴナル、diagonal)に作用する関数は相関、畳み込み(コンボルーション)、多項式係数(または同じことであるが、固定ベース上の数値の積)において有用である。

   t=: p */ q [ p=: 1 2 1 [ q=: 1 3 3 1
   t ; (+//.t) ; 1 1 &(+//.@(*/)) ^: (i.6) 1
 +-------+-------------+-------------+
 |1 3 3 1|1 5 10 10 5 1|1 0  0  0 0 0|
 |2 6 6 2|             |1 1  0  0 0 0|
 |1 3 3 1|             |1 2  1  0 0 0|
 |       |             |1 3  3  1 0 0|
 |       |             |1 4  6  4 1 0|
 |       |             |1 5 10 10 5 1|
 +-------+-------------+-------------+
   ((10#.p)*10#.q), 10 #. +//. p */ q
161051 161051

多項式係数と違い、掛け算表の対角線合計は基数(radix)と同じか超えた場合、正規化する(normalize)必要がある。