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.