APL/J言語:イテレーション(繰り返し)

プロセスの繰り返しや、一連の似たようなプロセスの連なりのことをイテレーションと呼びます。イテレーションの多くは非明示的です。たとえば*/bやa*/b、a*bなどです。(訳注:bがリストの場合、それぞれにかかる)
明示的イテレーションはパワー接続詞の^:(キャレットコロン、パワー、繰り返し)や、アジェンダの@.(アトマークドット)、自己参照、および制御構造が使われます。

   (cos=: 2&o.) ^: (i.6) b=: 1
1 0.540302 0.857553 0.65429 0.79348 0.701369
   ]y=: cos^:_ b  NB.y=Cos yの解を求める
0.739085
   y=cos y   NB.検証
1

この例は無限のイテレーションは値が収斂するものならば収斂する値を算出することを示している。
回数qを明示したイテレーションはp^:qで実行する。qの値の回数pが実行される。$:@p^:qやp^:q^:_のような形式もよく用いられる。
fが連続的な関数として、f iとf jの符号が違う場合、iとjの間にf rがゼロとなるようなrが存在するはずである。b=:i, jはルートのブラケットと呼ばれる。ルートを求めるには、ブラケットの平均の結果と逆の符合の結果を出す範囲を取ることにより、範囲を狭めることができる。

   f=: %: - 4:   NB.サンプル関数
   root=: 3 : 0
m=. +/ % #
while. ~:/y
do.
if. ~:/ * f ({.,m) y
   do. y=. ({.,m) y
 else. y=. ({:,m) y
end.
end.
m y
)
   b=: 1 32
   root b
16
   f b,root b
_3 1.65685 1.77636e_15

演習:
23.1 上記の関数rootを持ちいてf=: 6&-@!等の解を求めよ。

   f=: 6&-@!
   f 2
4
   f 4
_18

   b=: 2 4
   root b
3


23.2 関数fn=: +/\について実験し、関数fn^:(?@3:)の結果を説明せよ。

   fn=: +/\
   fn i.6
0 1 3 6 10 15
   i.6
0 1 2 3 4 5
   fn^:(?@3:) 3
3
   fn^:(?@3:) i.6
0 1 2 3 4 5