对我来说,Clojure宏是一个难点,这里有一个宏示例来自于“Practical Clojure”:
(defmacro triple-do [form]
(list 'do form form form))
user=> (triple-do (println "test"))
test
test
test
nil
这个三重循环很好用。 我认为下面的版本应该可以工作但不太行。
(defmacro triple-do [form]
(do form form form))
user=> (triple-do (println "test"))
test
nil
为什么它只打印一次?
接下来的内容让我感到非常困惑。
(defmacro test-macro [form] (do form (println "hard code test")))
user=> (test-macro (println "hello"))
hard code test
nil
为什么 "hello" 没有显示在控制台上?