Fixing letrec.
Performs the procedure described in "Fixing Letrec (reloaded)" by Abdulaziz Ghuloum and R. Kent Dybvig. It takes a syntax object encapsulating an expression of the input language and returns a syntax object encapsulating an expression of the output language. The input language has the following expressions:(begin
...), (if ...), (set! ...), (quote
...), (case-lambda ...), (letrec*-values ...),
procedure calls, and variable references.
The output language has the following expressions: (begin
...), (if ...), (set! ...),
(set-values! ...), (quote
...), (case-lambda ...), (letrec ...),
(let-values ...), procedure calls, and variable references.