Gödel, Escher, Elisp: The Beauty of Macros

In Emacs Lisp, code is data, and macros exploit this dualism to let you extend the language itself. This post explains what homoiconicity really means, shows how ubiquitous macros are (even `defun` is one), and takes a detour through Hofstadter's strange loops and Escher's prints to illustrate the beauty of macros. It also introduces tooling like `macroexpand` and macrostep to help you see through the magic.
A macro receives the body as inert data, so control flow itself is up for grabs.