Racket is <i>not</i> Lisp, and I mean this as praise, not as an in &quot;boo hoo, not Lisp, ergo bad&quot;. Racket&#x27;s macro system, in particular `syntax-parse` and `define-syntax-class`, makes it a joy to extend the language. When you use a Racket macro wrong, you get an error message <i>in terms of the abstraction the macro provides</i>, not in terms of what the macro expander compiles it to, which is an implementation detail you have no business knowing or caring about. `defmacro` doesn&#x27;t even begin to get close to the level of abstraction that Racket macros provide.