我有这个宏(来自clojure-koans)应该允许使用中缀运算符:
(defmacro infix-better [form]
`(~(second form)
(first form)
(last form) ))
它做了它应该做的事情,但并不完全扩展到相同的表达式。例如:
user=> (= '(* 10 2) (macroexpand '(infix-better (10 * 2))))
false
user=> '(* 10 2)
(* 10 2)
user=> (macroexpand '(infix-better (10 * 2)))
(* (clojure.core/first user/form) (clojure.core/last user/form))
最后一个输出最终会是(* 10 2)
当内部表达式被评估但相等测试返回 false 因为(clojure.core/first user/form)
严格来说, is not 10
。
如何使扩展宏等于等效的硬编码 Clojure?