@@ -264,8 +264,6 @@
 | 
			
		||||
                  (drop 2 form)
 | 
			
		||||
                  "Hello, Macros!"
 | 
			
		||||
                  10
 | 
			
		||||
                  '(+ 9 1)
 | 
			
		||||
                  '(* 10 2)
 | 
			
		||||
                  '(+ 10 (2 * 3))]}]
 | 
			
		||||
                  '(+ 9 1)]}]
 | 
			
		||||
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
@@ -7,23 +7,23 @@
 | 
			
		||||
(defmacro infix [form]
 | 
			
		||||
  (list (second form) (first form) (nth form 2)))
 | 
			
		||||
 | 
			
		||||
(defmacro infix-better [form]
 | 
			
		||||
(defmacro infix-concise [form]
 | 
			
		||||
  `(~(second form) ; Note the syntax-quote (`) and unquote (~) characters!
 | 
			
		||||
    __
 | 
			
		||||
    __ ))
 | 
			
		||||
    __))
 | 
			
		||||
 | 
			
		||||
(defmacro r-infix [form]
 | 
			
		||||
(defmacro recursive-infix [form]
 | 
			
		||||
  (cond (not (seq? form))
 | 
			
		||||
        __
 | 
			
		||||
        (= 1 (count form))
 | 
			
		||||
        `(r-infix ~(first form))
 | 
			
		||||
        `(recursive-infix ~(first form))
 | 
			
		||||
        :else
 | 
			
		||||
        (let [operator (second form)
 | 
			
		||||
              first-arg (first form)
 | 
			
		||||
              others __]
 | 
			
		||||
          `(~operator
 | 
			
		||||
            (r-infix ~first-arg)
 | 
			
		||||
            (r-infix ~others)))))
 | 
			
		||||
            (recursive-infix ~first-arg)
 | 
			
		||||
            (recursive-infix ~others)))))
 | 
			
		||||
 | 
			
		||||
(meditations
 | 
			
		||||
  "Macros are like functions created at compile time"
 | 
			
		||||
@@ -36,10 +36,10 @@
 | 
			
		||||
  (= __ (macroexpand '(infix (9 + 1))))
 | 
			
		||||
 | 
			
		||||
  "You can do better than that - hand crafting FTW!"
 | 
			
		||||
  (= __ (macroexpand '(infix-better (10 * 2))))
 | 
			
		||||
  (= '(* 10 2) (macroexpand '(infix-concise (10 * 2))))
 | 
			
		||||
 | 
			
		||||
  "Things don't always work as you would like them to... "
 | 
			
		||||
  (= __ (macroexpand '(infix-better ( 10 + (2 * 3)))))
 | 
			
		||||
  (= '(+ 10 (2 * 3)) (macroexpand '(infix-concise (10 + (2 * 3)))))
 | 
			
		||||
 | 
			
		||||
  "Really, you don't understand recursion until you understand recursion"
 | 
			
		||||
  (= 36 (r-infix (10 + (2 * 3) + (4 * 5)))))
 | 
			
		||||
  (= 36 (recursive-infix (10 + (2 * 3) + (4 * 5)))))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user