There are a bunch of different ways of writing a macro in Racket. There are also some tricky things around phases to keep in mind. This is to help me keep them all straight. 3+1 ways to make a macro # This form: (define-syntax-rule(foo args ...)(use args ...)) is equivalent to: (define-syntax foo (syntax-rules()([foo args ...](use args ...)))) Which, is in turn equivalent to: (define-syntax foo (λ(stx)(syntax-case stx ()[(gensymed-foo args ...)#'(use args ...)]))); gensymed-foo is like foo b...