Now, as you can imagine, since things can get complicated when using macros, there should be some way to debug them. We have two functions to accomplish that:
macroexpand
macroexpand-1
The difference between them has to do with recursive macros. There is no rule telling you that you can't use a macro from a macro (the whole language is there all the time, remember?). If you wish to go all the way through any macro, you can use macroexpand
; if you wish to go a single step forward, you can use macroexpand-1
.
Both of them show you the code generated by a macro call; this is what happens when you compile your Clojure code.
Give this a try:
(macroexpand-1 '(my-if (> a 200) (do (println"Bigger than 200") :bigger) (do (println"Smaller than 200") :smaller))) ;; (if (> a 200) (do (println"Bigger than 200") :bigger) (do (println"Smaller than 200") :smaller))
There is not much more to macros than this; you now understand them to a good...