Macros are powerful because they allow expressions to be manipulated during the macro expansion process. This is a tremendously useful technique, especially for code generation and designing domain-specific languages. Let's go over some examples to get a taste of what is possible.