我在Lazy Computations中有一些遞歸問題。我需要用Newton Raphson方法計算平方根。我不知道如何應用懶惰的評估。這是我的代碼:F#懶惰遞歸
let next x z = ((x + z/x)/2.);
let rec iterate f x =
List.Cons(x, (iterate f (f x)));
let rec within eps list =
let a = float (List.head list);
let b = float (List.head (List.tail list));
let rest = (List.tail (List.tail (list)));
if (abs(a - b) <= eps * abs(b))
then b
else within eps (List.tail (list));
let lazySqrt a0 eps z =
within eps (iterate (next z) a0);
let result2 = lazySqrt 10. Eps fvalue;
printfn "lazy approach";
printfn "result: %f" result2;
當然,堆棧溢出異常。