在let表达式外部预定义的绑定形式



引号形式应用于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期望的是没有引号的文字向量。

最新更新