Macros

Let's see simple example, without explaining the syntax of macro definition:

>(defmacro do3times (a) `(progn ,a ,a ,a nil))   ; special form DEFMACRO defines macro 
DO3TIMES
>(do3times (print "Hello"))     ; function PRINT will be called three times
"Hello"
"Hello"
"Hello"
NIL

When the first symbol DO3TIMES is recognized as a name of a macro, the form will be treated as macro-expansion form. In principle it means that two-step evaluation will happen. First the non-evaluated argument (print “Hello”) is submitted to the procedure we defined by DEFMACRO that will decide what to do with it - macro can evaluate, reorder, restructure the forms - and will return new piece of code. In the second step, the code is evaled. The first step is called macro expansion and can be examined with a function MACROEXPAND

>(macroexpand '(do3times (print "Hello")))   ; we expand the previously called command
(PROGN (PRINT "Hello") (PRINT "Hello") (PRINT "Hello") NIL)    ; this is the returned code
T