- (er-macro-rules (%sym ...) (code0 xpr0) (code1 xpr1) ...)syntax
references a renamed version of sym ... under the name %sym ... and pairs the differnt macro-codes code0 code1 ... with expressions xpr0 xpr1 ..., which usually evalute to backquoted templates.
This macro is unhygienic by design, it introduces the symbol compare? into its scope. The macro is implemented in contracts and only passed through.
Unhygienic macros can not be implemented with syntax-rules, so we must use er-macro-transformer or er-macro-rules.
Based on er-macro-rules, it's easy to implement three macros, er-macro-define, er-macro-let and er-macro-letrec, which facilitate the implementation of low-level macros even more: We simply match one pattern, the macro code, against a list of the form
(with-renamed (%sym ...) body . body...)
where %sym ... are aliases of sym ... and the sequence body . body... produces the macro-expansion.