Clojure向量具有不尋常的屬性,當你比較它們時,向量的長度被認爲是在任何其他屬性之前。在例如哈斯克爾有沒有一種標準的方法來比較Clojure向量的'傳統'方式
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))))
,但我希望這比較向量的方式非常簡單星期一,有一個標準的方式來實現這一點。在那兒?
不幸的是,它不會返回不相等大小的向量的預期結果,例如[1 2]和[1 2 3]。在其他語言中(或者至少:Haskell和Ruby),當它們具有相同的前綴時,最長的向量將被視爲更大。較短的版本很好,但我主要想知道在覈心或標準庫中是否存在版本。 – Confusion
授予,但也許在編寫自己的函數時,您可以利用我使用的一些核心功能。 – noahlz