Vector Clojure将序列与向量进行比较

Vector Clojure将序列与向量进行比较,vector,clojure,comparison,sequence,Vector,Clojure,Comparison,Sequence,:“编写一个反转序列的函数” 一种解决方案是(fn[x](reduce conj()x)),它通过了所有测试。然而,我很好奇为什么这个解决方案适用于第一个测试: (= (__ [1 2 3 4 5]) [5 4 3 2 1]) 内联函数在REPL中计算为true: (= ((fn [x] (reduce conj () x)) [1 2 3 4 5]) [5 4 3 2 1]) true 但是,如果我对=的第一个参数求值,就会得到(54 3 2 1),(=(54 3 2 1)[54 3 2

:“编写一个反转序列的函数”

一种解决方案是
(fn[x](reduce conj()x))
,它通过了所有测试。然而,我很好奇为什么这个解决方案适用于第一个测试:

(= (__ [1 2 3 4 5]) [5 4 3 2 1])
内联函数在REPL中计算为
true

(= ((fn [x] (reduce conj () x)) [1 2 3 4 5]) [5 4 3 2 1])
true
但是,如果我对
=
的第一个参数求值,就会得到
(54 3 2 1)
(=(54 3 2 1)[54 3 2 1])
抛出一个
类异常


为什么前者有效而后者无效?看起来它们应该是等价的…

问题是,您的列表文字
(5 4 3 2 1)
正在作为函数调用进行计算。要正确使用它,您需要引用它,如下所示:


(='(54321)[54321]);=>true

另一种不使用reduce的方法是使用
into()
因为它和你的减量一样精确。因此,当你用这种方式填空时,它就解决了任务:

(= (into () [1 2 3 4 5]) [5 4 3 2 1]) ;; true
(= (into () (sorted-set 5 7 2 7)) '(7 5 2)) ;; true
(= (into () [[1 2][3 4][5 6]]) [[5 6][3 4][1 2]]) ;; true

美好的刚刚开始使用Clojure,所以我不知道如何将
转换为