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 = ()
とまあ雰囲気的にはこういうものです。