I am wondering how F# implements let rec
, and I couldn't find an answer. As a preface, I'll address how Scheme implements letrec
:
- In Scheme,
let
is just syntactics sugar for a definition of a lambda and applying it:
(let ((x 1)) (+ x 2))
is transformed to
((lambda (x) (+ x 2)) 1)
(in each case the expression is evaluated to 3
).
letrec
is also syntactic sugar, but#f
is passed as initial argument to the lambda's parameters, andset!
expressions are injected before theletrec
body, like in this transformation:
(letrec ((x 1)) (+ x 2)) => ((lambda (x) (begin (set! x 1) (+ x 2))) #f)
.
Considering that F# doesn't have an equivalent operator to Scheme's set!
, how does it implement let rec
? Does it declare the function's parameters as mutable
, and then mutate them in the function's body?