動名詞(gerund)と式次第(アジェンダ)
英語では、動名詞ジェランドとは動詞の力を保持した名詞のことである。たとえばクッキングは料理する技術のことを指す言葉である。アジェンダはやるべきことのリストである。タイ接続詞`(バッククオート)は二つの動詞つないで動名詞を作り、そこから実行すべき要素が取り出されます。アジェンダ接続詞@.(アトマークドット)は動名詞に作用し、右側の動詞引数の結果が要素を決定します。
g=: +`^ a=:< 2 a 3 NB.2 < 3は真なので1 1 2 g@.a 3 NB.2 a 3の結果1 => 2^3 => 8となる 8 3 g@.a 2 NB.3 a 2の結果は0 => 3 + 2 => 5となる 5 +:`-:`*:`%: @. (4&|@<.)"0 i. 10 0 0.5 4 1.73205 8 2.5 36 2.64575 16 4.5 NB.i.10を4で割った結果で動名詞を選びi.10に作用させる NB.+:0,-:1,*:2,%:3,+:4,-:5,*:6,%:7,+:8,-:9
g@.aはケース文と呼ばれることがある。なぜなら場合(ケース)により動名詞が選ばれるからである。挿入(インサート)の副詞/(スラッシュ)は動名詞について動詞の時と似たような働きを持つ。
c=:3 [ x=: 4 [ power=: _1 g/ c,x,power 3.25 3+x^_1 NB.cとxとpowerの間にg=:+`^が分解されて挿入 3.25
+`*/1,x,3,x,3,x,1 125 NB.1 + x * 3 + x * 3 + x * 1 NB.1 + 4 * 3 + 4 * 3 + 4 * 1 NB.1 + 4 * 3 + 4 * 3 + 4 NB.1 + 4 * 3 + 4 * 7 NB.1 + 4 * 3 + 28 NB.1 + 4 * 31 NB.1 + 124 NB.125
上記のこの文は二項係数1 3 3 1と引数xをホーナーの方法により効率的に評価した結果に対応するものです。
演習:
21.1 関数fを定義し、
(x=: 4) f c=: 1 3 3 1
がホーナーの方法+`*/に対して用いられた引数と同じリストになるようにせよ。
答え: f=: }.@,@,.
f=: }.@,@,. (x=: 4) f c=: 1 3 3 1 1 4 3 4 3 4 1 NB.}.(波かっこドット、ブレイスドット)はリストの最初以外のリスト(rest) (x ,. c); (,(x ,. c)); }.(,(x ,. c)) +---+---------------+-------------+ |4 1|4 1 4 3 4 3 4 1|1 4 3 4 3 4 1| |4 3| | | |4 3| | | |4 1| | | +---+---------------+-------------+
考察:,.(カンマドット)は,"0(カンマクオートゼロ)と同じか?
f=:}.@,@,"0 (x=: 4) f c=: 1 3 3 1 1 3 3 1 f=:}.@,@(,"0) (x=: 4) f c=: 1 3 3 1 1 3 3 1 f=:}.@,@:(,"0) (x=: 4) f c=: 1 3 3 1 1 4 3 4 3 4 1
リスト単独だと,.(カンマドット)は,"0(カンマクオートゼロ)は同じであるが、@:(アトマーク、アトップ)との距離感が違うようである。