Вот код:
При компиляции и запуске он, вместо того, чтобы полностью рассчитать первую лямбда-функцию с N = 0 на кой-то черт рассчитывает никому не нужные значения N, меньшие нуля!
Что происходит? Может быть, «ленивость» можно как-то форсировать?
let rec Y func tracker args = func args (Y func tracker (tracker args)) let fib N = (fun (x, y) -> x) (Y (fun N (prev, pprev) -> if N = 1 then (1, 0) else (prev + pprev, prev)) (fun N -> N - 1) N) let main = let value = fib 10 System.Console.WriteLine(value) System.Console.ReadKey()
При компиляции и запуске он, вместо того, чтобы полностью рассчитать первую лямбда-функцию с N = 0 на кой-то черт рассчитывает никому не нужные значения N, меньшие нуля!
Что происходит? Может быть, «ленивость» можно как-то форсировать?