我工作的一個宏,我試圖找出如何避免某些形式的擴張,採取以下和宏觀例如,Clojure的宏擴展
(defmacro and
([] true)
([x] x)
([x & next]
`(let [and# ~x]
(if and# (and [email protected]) and#))))
展開時,
(mexpand-all '(and 1 2 3))
變,
(let* [and__973__auto__ 1]
(if and__973__auto__
(let* [and__973__auto__ 2]
(if and__973__auto__ 3 and__973__auto__))
and__973__auto__))
在這種情況下,我需要做的是停止從擴大到讓*讓。
我想要做的是遞歸地擴展除let形式之外的所有東西。順便說一句,mexpand來自contrib macro-utils – 2011-05-13 02:26:05