継続渡し(Continuation-passing style)の末尾再帰
ここらに書いてるのはこういうことだろうという。以下はリストの中の最大値を求めるコード。
let maximum xs = let rec maximum proc xs = match xs with | [] -> failwith "List is empty!!!" | x::[] -> proc x | x::xs -> maximum (fun y -> proc(max x y)) xs maximum id xs
実際に動かすと
> [1;5;2;3;5;6;8;1;2;3] |> maximum val it : int = 8