パーティションのところは訳しにくいなぁ。部屋の仕切りのことをパーティションといいますが、リストの区切りと言いたいのかなぁ。副詞\(バックスラッシュ、円マーク)のことです。概念としては簡単で、たとえばsum=: +/を全体にかける際に、初めは初めの1つ、次に2つ、3つと順番にやっていって、最後に全部にかけた数字(この場合はリストの合計)を算出する。結果はもとのリストと要素数が同じリストになります。
英語での説明はこんな感じです。
関数sum=: +/はリスト全体に作用する。部分の合計やサブトータルを計算するためには、引数のその場所までの前段部分(prefix)のそれぞれについてsumを作用させる必要がある。
sum=: +/ a=: 1 2 3 4 5 6 (sum a) ; (sum\ a) +--+--------------+ |21|1 3 6 10 15 21| +--+--------------+
つまり、1=1, 1+2=3, 1+2+3=6,...ということです。
記号の\(バックスラッシュ、円マークは)前段部分(prefix)に作用させるという意味の副詞で、動詞引数(この場合はsum)を右側引数の前段部分のそれぞれに作用させます。副詞の\.(バックスラッシュドット、円マークドット)は同様に後段部分のそれぞれに作用します。
sum\. a 21 20 18 15 11 6
単項動詞の<(小なりマーク)は引数をボックス化します。したがって<\(小なりバックスラッシュ、小なり円マーク)や<\.(小なりバックスラッシュドット、小なり円マークドット)は区切り(パーティション)の効果を明確に示します。
<1 2 3 +-----+ |1 2 3| +-----+ (<1),(<1 2),(<1 2 3) +-+---+-----+ |1|1 2|1 2 3| +-+---+-----+ <\ a +-+---+-----+-------+---------+-----------+ |1|1 2|1 2 3|1 2 3 4|1 2 3 4 5|1 2 3 4 5 6| +-+---+-----+-------+---------+-----------+ <\. a +-----------+---------+-------+-----+---+-+ |1 2 3 4 5 6|2 3 4 5 6|3 4 5 6|4 5 6|5 6|6| +-----------+---------+-------+-----+---+-+
斜め線副詞/.(スラッシュドット)はテーブルについて対角線上に作用します。
#.(シャープドット)は、左側の引数(デフォルトは2)をベースにして、右側の引数を数値化する動詞で、10 #.1 2 3ならば1*10*10+2*10*3=123が返されます。
演習:
14.1 掛け算、最大値、最小値についてsum:+/\と似たような動詞を作れ。
prog=:*/\ prog a 1 2 6 24 120 720 max=:>./\ max a 1 2 3 4 5 6 min=:<./\ min a 1 1 1 1 1 1
14.1 下記のプログラムについて演習せよ。c=:1 3 3 1、d=: 1 2 1、x=:i.5とした上で、c pol x、c pp d、(c pp d) pol x等を実行してみよ。
pol=: +/@([*]^i.@#@[)"1 0 NB.多項式(Polynomial) pp=: +//.@(*/) NB.多項式の積 pp11=: 1 1&pp NB.1 1による多項式の積 pp11 d pp11^:5 (1) ps=: +/@,: NB.多項式の和
c =: 1 3 3 1 d=: 1 2 1 x=:i.5 pol=: +/@([*]^i.@#@[)"1 0 c pol x 1 8 27 64 125 1 3 3 1 ([*]^i.@#@[)"1 0 i.5 1 0 0 0 1 3 3 1 1 6 12 8 1 9 27 27 1 12 48 64 c pp d 1 5 10 10 5 1 c */ d 1 2 1 3 6 3 3 6 3 1 2 1