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 主体的本地定义,它们可以相互引用以进行相互递归,我不太确定什么(如果有的话)是错误的。