 ;;;; - The full power of the language is available when defining a macro.
 
 ;;;; ___________________________________________________________________________
-;;;; Simple rearranging of arguments
-
-;;;; Define a macro:
+;;;; Defining a simple macro.
 
 (defmacro our-if-not-1
   ([test then else]
    (list 'if test else then)))
-
-;;;; A use of the macro:
 
 (fact
   (let [x 99]

;;;; What's happening?
;;;; - Before compilation, macro calls are replaced with their macro expansion.

;;;; What's a macro expansion?

(fact
  (macroexpand-1 '(our-if-not-1 (> x 100)
                                (do (println "It's large") :large)
                                (do (println "It's small") :small)))

;;;; ___________________________________________________________________________
;;;; Code transformation.

;;;; More than just rearranging things.

(defmacro lisp-let [[& bindings] & body]
  ;; A very simple-minded implementation -- no error checking.
  `(let ~(vec (apply concat bindings))
