你好,我正在学习Clojure宏,尝试编写一个将中缀表达式转换为前缀表达式的宏,例如:(9 + (1 * 3)) => (+ 9 (* 1 3))。
(defn infix [form]
(list (second form) (first form) (nth form 2)))
(defmacro r-infix [form]
(if (coll? form)
(map r-infix (infix form))
form))
(r-infix (9 + (1 * 2)));;=>ArityException
但是,如果按照以下方式定义宏,它就可以正常工作:
(defn infix [form]
(list (second form) (first form) (nth form 2)))
(defn r-infix-fn [form]
(if (coll? form)
(map r-infix-fn (infix form))
form))
(defmacro r-infix [form]
(r-infix-fn form))
(r-infix (9 + (1 * 2)));;=>11
我在调试第一个示例时遇到了一些困难,有人能帮忙吗?