Вот код:
При компиляции и запуске он, вместо того, чтобы полностью рассчитать первую лямбда-функцию с 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, меньшие нуля!
Что происходит? Может быть, «ленивость» можно как-то форсировать?
