Practical Lisp systems provide a mechanism that allows users to add new derived expressions and specify their implementation as syntactic transformations without modifying the evaluator. Such a user-defined transformation is called a /macro/. Although it is easy to add an elementary mechanism for defining macros, the resulting language has subtle name-conflict problems. There has been much research on mechanisms for macro definitions that do not cause these difficulties. See, for example, Kohlbecker 1986, Clinger and
Rees 1991, and Hanson 1991.(Aside: “practical” lisp systems have them; the dialect covered in the book does not. Students can and do draw the obvious conclusion ….)
SICP