 ;;;; ___________________________________________________________________________
 ;;;; 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))

;;;; - The full power of the language is available when defining a macro.

;;;; ___________________________________________________________________________
;;;; Simple rearranging of arguments

;;;; Define a 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.

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