F#はレイジーではありません:(

コードは次のとおりです。



 rec Y funcトラッカーargs =
     func args(Y funcトラッカー(トラッカーargs))
    
 let fib N =(fun(x、y)-> x)(Y 
     (fun N(前、pprev)-> if N = 1 then(1、0)else(prev + pprev、prev)) 
     (楽しいN-> N-1)
     N)
        
メイン=
     let value = fib 10
     System.Console.WriteLine(値)
     System.Console.ReadKey()


コンパイルして起動するとき、最初のラムダ関数をN = 0で完全に計算する代わりに、ある地獄のために、ゼロ未満のN値を必要とする人はいないと計算します!



何が起こっているの? たぶん怠inessは何とか強制することができますか?



All Articles