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

2008年2月2日
1 分

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

# 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>

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