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)必要がある。