Pull to refresh

F# не ленится :(

Reading time1 min
Views523
Вот код:

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, меньшие нуля!

Что происходит? Может быть, «ленивость» можно как-то форсировать?
Tags:
Hubs:
Total votes 13: ↑7 and ↓6+1
Comments7

Articles