コレクションあれこれ

vector と list は同値判定できる。でも set や hash-map はダメ。

(= [1 2 3] '(1 2 3))
 ;=> true

(= [1 2 '(3 4)] '(1 2 [3 4]))
 ;=> true

(= [1 2 3] #{1 2 3})
 ;=> false

(= [:a 1 :b 2] {:a 1 :b 2})
 ;=> false

コレクションの大小比較(辞書順)は compare

(compare [1 2 3] [1 2 3]) ;=> 0
(compare [1 2 3] [1 2 2]) ;=> 1
(compare [1 2 3] [1 2 4]) ;=> -1

= と違い vector と list の比較はできない

(compare [1 2 3] '(1 2 3))
  ;=> java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.IPersistentVector (NO_SOURCE_FILE:0)

next と rest の違い

コレクションの要素が2個未満の時結果が違う

(next [1 2 3]) ;=> (2 3)
(rest [1 2 3]) ;=> (2 3)

(next [1]) ;=> nil
(rest [1]) ;=> ()

(next nil) ;=> nil
(rest nil) ;=> ()