When to use macros
You have to use macros when
- you need to control evaluation
- binding (like local variables in LET)
- conditional evaluation (like AND or OR or IF)
- looping (like DO)
- Simplification without a function call (like (SETF CAR) expanding into RPLACA)
You can use macros to
- do computation at compile-time
- expand in place and avoid a function call
- save typing or code duplication, and to clarify code