APL/J言語:分類(選択と内積)
完全分類テーブルは各種内積を含む、いろいろな用途に応用されます。
cct=: #:@i.@(2: ^ #) m=: 2 3 5 ,: 4 2 1 n=: |: cct 0{m m ; n ; m +/ . * n +-----+---------------+----------------+ |2 3 5|0 0 0 0 1 1 1 1|0 5 3 8 2 7 5 10| |4 2 1|0 0 1 1 0 0 1 1|0 1 2 3 4 5 6 7| | |0 1 0 1 0 1 0 1| | +-----+---------------+----------------+
内積のパターンは以下の表示でよりいっそう明確に観察できる。すなわち、右下の行列の積pの行と列がそれぞれ左側引数の行と、右側引数の列に対応する。
('' ; n) ,: (m ; p=: m +/ . * n) +-----+----------------+ | |0 0 0 0 1 1 1 1 | | |0 0 1 1 0 0 1 1 | | |0 1 0 1 0 1 0 1 | +-----+----------------+ |2 3 5|0 5 3 8 2 7 5 10| |4 2 1|0 1 2 3 4 5 6 7| +-----+----------------+ (+/r*c) ; (r*c) ; (r=: 0{m) ; (c=: 3{"1 n) ; (<0 3){p +-+-----+-----+-----+-+ |8|0 3 5|2 3 5|0 1 1|8| +-+-----+-----+-----+-+
通常の行列の積が積の合計となるように、*/ . ^は乗数後の積を算出する。従って、m */ . ^ nはmの各行のすべての部分集合になる。
m */ . ^ n 1 5 3 15 2 10 6 30 1 1 2 2 4 4 8 8
分類におけるキー副詞/.(スラッシュドット、キー)についても参照のこと。