为什么Clojure应用处理向量不同于列表?

Dan*_*anB 1 reduce clojure apply

我很好奇为什么第一个应用(以及还原)的参数会影响函数的行为,如下面的代码片段所示.

user=> (apply conj '() [1 2 3])
(3 2 1)
user=> (apply conj [] [1 2 3])
[1 2 3]

user=> (apply conj '() '(1 2 3))
(3 2 1)
user=> (apply conj [] '(1 2 3))
[1 2 3]
Run Code Online (Sandbox Code Playgroud)

nic*_*ley 6

你的问题是关于conj的行为而不是apply的行为.

Conj将项目添加到列表的前面和向量的末尾.

请参阅:http://clojure.org/data_structures


kot*_*rak 5

它不是applyreduce修改行为conj.conj本身就是多态的.它以给定数据结构的最有效方式添加元素.