У меня возникли проблемы с рекурсией в Lazy Computations. Мне нужно вычислить квадратный корень методом Ньютона Рафсона. Я не знаю, как применять ленивую оценку. Это мой код:F # lazy recursion
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;
Конечно, исключение переполнения стека.