割線法の実装
# let secant f x1 x2 stop = let delta xn1 xn2 = (f xn2) *. (xn2 -. xn1) /. ((f xn2) -. (f xn1)) in let stopcond = stop f delta in let rec iter xn1 xn2 = if (stopcond xn1 xn2) then xn2 else (iter xn2 (delta xn1 xn2)) in iter x1 x2;; val secant : (float -> float) -> float -> float -> ((float -> float) -> (float -> float -> float) -> float -> float -> bool) -> float = <fun> # secant (fun x -> x *. x -. 1.0) 0.0 2.0 (fun f delta x1 x2 -> (abs_float (delta x1 x2)) < 0.00001);; - : float = 0.99999855887482747
やあ、なんだかこういうのは自然に書けていいかも。