繰り返しのための高階関数

繰り返しの構造を関数(再帰関数)にすることもできる。

 # let rec whle condition body =
     if condition () then
       begin body (); whle condition body end
   ;;
 val whle : (unit -> bool) -> (unit -> 'a) -> unit = <fun>

condition () が真であるあいだ body を繰り返す。条件 condition () が単なる真偽値の式ではなくて unit -> bool 型の関数なところがミソ。たとえばファイルからの入力など。

もう一つ,リストの各要素に対して繰り返す関数。

 # let rec iter f = function
     [] -> ()
   | a :: rest -> begin f a; iter f rest end
   ;;
 val iter : ('a -> 'b) -> 'a list -> unit = <fun>

リストの各要素を出力するときとかに使える。