为什么 next 不是 gensymed?

Why is next not gensymed?

这里 x 是 gensymned 因为传递给 and 的某些表达式可以包含 x 并避免冲突。那为什么 next 没有生成?不能 next 导致变量捕获吗?

(defmacro and 
  ([] true)
  ([x] x)
  ([x & next]
    `(let [and# ~x]
      (if and# (and ~@next) and#))))

x 不是 gensymmed,也不应该是。这里的 gensymmed 是 and#,它是 gensymmed 的通常原因:它是一个合成绑定,引入到调用者范围内,用于宏的 internal-only 用法。 xnext 是这些东西的 none:它们不是作为绑定引入的,也不是用于宏的 internal-only 用法。它们是由调用者提供的代码片段(一种形式和一系列形式),旨在为调用者的目的出现在扩展体中。