apply
接收单独的值,然后将剩余值作为最后一个参数接受为一个集合,因此最后一个参数总是不同的。我想这是你遗漏的基本点。最后一个参数(集合)的值将被插入到调用中。
通用示例
(f 1 2 3 4)
可以写成以下任何一种(这些等价)
(apply f 1 2 3 4 nil)
(应用 f 1 2 3 4 [])
(应用 f 1 2 3 [4])
(应用 f 1 2 [3 4])
(应用 f 1 [2 3 4])
(应用 f [1 2 3 4])
在您的例子中,conj 是一个先接受一个集合作为参数的函数,因此第一个参数应始终是一个向量。然后,您期望有后续值插入其中。以下使用数字简化示例,这些是等效的
(conj [1] 2)
(应用 conj [1] 2 nil)
(应用 conj [1] [2])
或是3个值
(conj [1] 2 3)
(应用 conj [1] 2 3 nil)
(应用 conj [1] 2 3 [])
(应用 conj [1] 2 [3])
(应用 conj [1] [2 3])