为什么LET不适用于VECTOR?

yeg*_*256 3 clojure

代替

(let [x 1] (my-expression))
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用:

(let (vector x 1) (my-expression))
Run Code Online (Sandbox Code Playgroud)

不要问为什么,我更喜欢普通的括号.但是Clojure说:

let requires a vector for its binding in ...
Run Code Online (Sandbox Code Playgroud)

怎么了?

A. *_*ebb 7

让特殊形式 结合的形式要求是一个矢量文字不只是一个表达式,将评估为载体.

为什么?粗略地说,必须先编译表达式,然后才能对其进行求值.在编译时(vector x 1)不会被评估为a vector,它只是一个列表.事实上,如果要对其进行评估,将对其论点vector进行评估,这意味着x必须予以解决.但是,你不想x被解决,你想要它的约束.

  • 观看David McNeil的[Macros are Hard!](http://www.infoq.com/presentations/Clojure-Macros)演示文稿,逐步深入了解读者和评估者的工作方式. (2认同)