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:
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
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 ...