(rapid fix-letrec)

Fixing letrec.

(fix-letrec expr)

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.