R5RS дает предлагаемые определения макросов для библиотечных форм синтаксиса:
http://schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-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, они могут ссылаться друг на друга для взаимной рекурсии, я не совсем уверен, что (если таковое имеется) неправильно.