R5RS は、ライブラリ形式の構文に対して提案されたマクロ定義を示します。
http://schemers.org/Documents/Standards/R5RS/HTML/r5rs-ZH-10.html#%_sec_7.3
これはまた、非常に複雑な方法で letrec を定義します。確かに私がそれを定義する方法ではありません。
(define-syntax letrec2
(syntax-rules ()
((letrec2 ((name val) ...) body bodies ...)
((lambda ()
(define name val) ...
body bodies ...)))))
letrec のセマンティクスを理解している限り、名前付き let として頻繁に使用します。このように機能しますが、特殊相対性理論や確立された音韻論を反証できると考えている哲学者とのかなりの議論を行ってきたので、複雑な問題に対する単純な解決策があると考えるとき、それはおそらく違う。このマクロが letrec のセマンティクスを満たさない点がいくつかあるに違いありません。
この定義では、定義は letrec の本体に対してローカルであり、相互再帰のために相互に参照できます。何が間違っているのか (もしあれば) よくわかりません。