将引号形式应用于let macro的绑定形式时的"语法错误宏展开">:
(def x '[y 1])
(let x y)
如果绑定形式是在let表达式外部预定义的,如何使其工作?
@EDIT
一次偶然的机会,我在这个问题上尝试了本地,该问题要求在三个测试用例中的每个用例中填写相同的绑定表单。我在下面失败了,所以提出了这个问题。
(def __ '[x 7 y 3 z 1])
(println
(= 10 (let __ (+ x y)))
(= 4 (let __ (+ y z)))
(= 1 (let __ z)))
您不能在let
表单之外预定义let
绑定。4clojure问题并不是要求您这样做,尽管我可以理解为什么您会尝试执行所显示的操作(def
将__
设置为文字向量(。
4clojure在幕后所做的是采用文字输入和宏扩展形式,以便将输入放置在__
所在的位置
user=> (let [__ '[x 7 y 3 z 1]] `(let ~__ (+ ~'x ~'y)))
(clojure.core/let [x 7 y 3 z 1] (clojure.core/+ x y))
然后评估结果:
user=> (clojure.core/let [x 7 y 3 z 1] (clojure.core/+ x y))
10
4clojure期望的是没有引号的文字向量。