Here x
is gensymned because some expression passed to and
can have x
in it and to avoid that conflict. Then why is next
not gensymed? Couldn't next
lead to variable capture?
(defmacro and
([] true)
([x] x)
([x & next]
`(let [and# ~x]
(if and# (and ~@next) and#))))