Clojure向量有一个不同寻常的特性,在比较它们时,向量的长度被优先考虑,而不是其他任何属性。例如在Haskell中则不然。
现在您可以自己实现“传统”的比较方法:
Prelude> [1, 3] > [1, 2, 3]
True
以及Ruby
1.9.3p392 :003 > [1, 3] <=> [1, 2, 3]
=> 1
但在Clojure中:
user=> (compare [1, 3] [1, 2, 3])
-1
现在您可以自己实现“传统”的比较方法:
(defn vector-compare [[value1 & rest1] [value2 & rest2]]
(let [result (compare value1 value2)]
(cond
(not (= result 0)) result
(nil? value1) 0 ; value2 will be nil as well
:else (recur rest1 rest2))))
但我预计比较向量的方法很常见,应该有一种标准的方法来实现这个功能,是吗?