If you have to ask about macros, you REALLY dont need macros.
Macros are really only instructions for the compiler, how to compile things faster.
The syntax improvement aspect is minuscule, because Lisp has no actual syntax perse.
These are very strange statements, coming from you. Please teach the kids properly! :)
Bad memories. Some malformed macro may evaluate differently than compile and the problem is impossible to find.
This is a feature. It is something you want sometimes and don't want at other times.
Macros can stage calculations to compile time. Compile time can happen in a completely different environment from run-time, such as on a different machine. It only happens once, whereas run-time can repeat many times.
A macro can be designed to that it opens a specific file, reads the content and generates some code based on that (or simply includes the file as a literal constant). That file exists only on the build machine, perhaps part of the source tree of the program. Thus, compiled code containing the macro call can run anyhere, but source code containing the macro cannot be evaled anywhere.
Hey Grok: Does commonlisp have some mechanism to prevent malformed macro to do things globally, so that eval works differently than compile?
Grok: Yes.
< 5 pages of semi-incomprehensible explanations omitted >
Hey Grok: Write commonlisp macro "test", which is usually an addition, but when two parameters are already numbers, it is the sum of those numbers.
(defmacro test (a b)
(if (and (numberp a) (numberp b))
(+ a b)
`(+ ,a ,b)))