Syntax 是Clojure'中的方括号;s defn、defmacro和binding真的是向量吗?

Syntax 是Clojure'中的方括号;s defn、defmacro和binding真的是向量吗?,syntax,vector,clojure,Syntax,Vector,Clojure,Clojure的defn、defmacro和binding(我是不是忘记了一些?)中围绕参数的方括号真的创建了一个向量,还是仅仅是语法问题,使参数脱颖而出 我正在读《Clojure在行动》一书,书中说: Clojure使用向量来表示 函数参数或绑定形式 这让我在这里问了这个问题。是的,它实际上是一个向量。我们可以看到,通过手动构建函数,然后对其进行评估: (eval (list (list 'fn (vector 'x) (list '* 'x 2)) 100)) ;=> 200 希望这

Clojure的
defn
defmacro
binding
(我是不是忘记了一些?)中围绕参数的方括号真的创建了一个向量,还是仅仅是语法问题,使参数脱颖而出

我正在读《Clojure在行动》一书,书中说:

Clojure使用向量来表示 函数参数或绑定形式


这让我在这里问了这个问题。

是的,它实际上是一个向量。我们可以看到,通过手动构建函数,然后对其进行评估:

(eval (list (list 'fn (vector 'x) (list '* 'x 2)) 100))
;=> 200

希望这能有所帮助。

不过有一个问题(两年半后…),为什么不接受这个问题?(defn foo(向量'x'y)(+xy))defn
defn
表单是一个宏,因此在检查它时(宏扩展时间),没有对任何内容进行评估。因此,当它查看绑定表单时,它希望看到一个向量,但看到的却是一个列表
(vector(quote x)(quote y))
。Tnx。