F# Не Ленивый :(

Вот код:

 
 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, меньшие нуля! Что происходит? Может, «лень» можно как-то заставить? Теги: #F# #whatzanah #jamb #fp #Chulan
Вместе с данным постом часто просматривают: