23. 反覆

相同程序不斷重複,或者一序列類似的程序稱之反覆。 許多反覆動作為內部作業,例如 */b a*/b,以及 a*b ;寫程式指定反覆動作,可用乘冪連接詞 (^:)、自我參照的議程(@.) 與控制結構:
   (cos=: 2&o.) ^: (i.6) b=: 1
1 0.540302 0.857553 0.65429 0.79348 0.701369

   ]y=: cos^:_ b
0.739085

   y=cos y
1
範例 cos^:_ 顯示,只有應用程序收斂,無窮反覆才有意義。

程序 p 的反覆執行,由 p^:q 控制,其中以 q 的結果做為 p 反覆執行的次數。片語 $:@p^:q p^:q^:_ 都蠻有用的。

若 f 為連續函數,且若 f i f j 正負號不同,則必然在 i與  j之間有根 r,使得 f r 為零;條列 b=:i,j 稱為根的罩子。而 b 的平均數與函數值符號相異的原來罩子的某一原子,構成一個更窄的罩子 。因此:
   f=: %: - 4:                 範例函數

   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   Use 函數 root to find roots of 各類函數, such as f=: 6&-@!

23.2   Experiment with 函數 fn=: +/\ (which produces figurate numbers when applied repeatedly to i.n),and expla在behaviour of 函數 fn^:(?@3:)


下個前個字彙索引主選單