Take a look at this posting by Matthias Felleisen to the LL1 discuss list in 2002. In it heHe suggests three main uses for macros:
- Data sublanguages: I can write simple looking-looking expressions and create complex nested lists/arrays/tables with quote, unquote, etc. neatly dressed up with macros. 2. Binding constructs: I can introduce new binding constructs with macros. That helps me get rid of lambda'slambdas and with placingplace things closer together that belong together. 3. Evaluation reordering: I can introduce constructs that delay/postpone the evaluation of expressions as needed. Think of loops, new conditionals, delay/force, etc. [Note: In Haskell or any lazy language, you don't need thatthis one is unnecessary.]