@.(アトマークドット、アジェンダ)


アジェンダ@.(アトマークドット、アジェンダ)は、@.(アトマークドット、アジェンダ)の右側の引数の値に応じて左側のバッククオートで区切られた動詞の並びから選択された動詞が実行されます。他の言語でのcaseやwhenのような働きをします。右側の引数が動詞の場合、動詞の結果の値で左側の動詞が選択されます。

   NB.9より小さければ倍、大きければ1/2にする。dorh=double or half
   dorh=: +: ` -: @. (]>9:) 
   dorh " 0 primes=: 2 3 5 7 11 13 17 19
4 6 10 14 5.5 6.5 8.5 9.5
   NB.0ならば_:、1ならば%:、2ならば*。マイナスの値の場合、後ろから。
   _:`%:`*: @. * "0 a=: 2 1 0 _1 _2
1.41421 1 _ 1 4
   NB.下記の結果は(1 2 3) * (6 5 4)と同じ
   g=: +`-`* 
   x=: 1 2 3 [ y=: 6 5 4
   (x g@.2: y)
6 10 12
   NB.下記の結果は(5 4 3 2 1 0) * (4 3 2 1 0 _1)
   (] * < :) y=: 5 4 3 2 1 0           NB.Basis of factorial
20 12 6 2 0 0
   NB.次の式は、要素が1より大きいかどうかで演算を変える
   1:`(] * < :) @. (1: < ]) "0 y       NB.Case statement
20 12 6 2 1 1
   NB.次の式は自己参照再帰の$:(ドルマークコロン)を使用
   1:`(] * $:@< :)@.(1: < ])"0 y       NB.Self-reference for recursion
120 24 6 2 1 1   NB.cf.1:`(] * <:)@.* 5=>120
   NB.右側がボックスの場合、かっこ化される
   +`-`*`% @. (1 0 3;2 0)
(- + %) (* +)
   NB.3 (- + %) (* +) 4 => _12.8125
   3 +`-`*`% @. (1 0 3;2 0) 4
_12.8125
   NB.次の式は解析中。結果は((i.@!) A. i.) 3と同じ。
   perm=: i.@i.@_2: ` ( [: ,/ (0: ,. $:&.< :) {"2 1 \:"1@=@i.) @. * 
   perm 3
0 1 2
0 2 1
1 0 2
1 2 0
2 0 1
2 1 0