OCaml一人勉強会 - 遅延評価

関数型といえば遅延評価?そりゃハスなんとかのことかい?(Clean のこともたまには思い出してあげてください)とかまあそれは置いといて。
遅延評価(lazy evaluation)は、値が必要になるまで計算を行わず、実際に値が必要になった時に計算を行う手法です。
どういう場合に有効なのかというと、よくある例としては無限リストがあります。
ここではとりあえず、どうすれば遅延評価が実現できるかだけを話します。まあコード自体は一行で終わるんですが。

let delay = fun () -> expr;

delay は引数を取らずに式 expr を評価した値を返す関数になります。値を取り出す際は delay() のような形で関数呼び出ししてやる必要があります(delay だけでは関数の呼び出しは行われない)。

# let output () = print_endline "lazy :)";;
val output : unit -> unit = <fun>
# output;;
- : unit -> unit = <fun>
# output();;
lazy :)
- : unit = ()

とまあ雰囲気的にはこういうものです。