【发布时间】:2017-12-11 16:49:07
【问题描述】:
嗨,我正在学习 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
我在调试第一个示例时遇到了一些困难,有人可以帮助我吗?
【问题讨论】:
-
似乎与groups.google.com/forum/m/#!topic/clojure/bL6ORz4G-vQ的“异地副本”几乎完全相同