Hacker News new | ask | show | jobs
by glutamate 4092 days ago
Tail call optimisation in F# ?
1 comments

Wait...mono doesn't do tail call optimization with f#???
It is (or was) complicated, you could stack overflow on two mutually recursive functions or tail calling inside continuations.
I'm getting constant memory on this (mono v3.12.1)

    let rec beep x =
        if x = 0 then x else boop (x - 1)
    and boop y =
        if y = 0 then y else beep (y - 1)
    
    let main argv =
        printfn "%A" (beep 999999999)
        0
Those are mutually recursive functions, but they're not using continuations.