>
>
> It is surprising at first, but since vectors are used so commonly in
>> Clojure instead of lists to represent literal sequential collections of
>> data, it turns out to be extremely convenient to be able to compare it for
>> equality against sequential collections generated as lists or lazy
>> sequences.  Basically, all those things are just flat, linear collections,
>> and what we really care about from an equality standpoint is whether the
>> collections have the same elements in the same order.  Clojure similarly
>> considers different types of maps (hash-maps, array-maps, sorted-maps) to
>> be equal if the associations are the same.  Ditto for hash-sets and
>> sorted-sets.
>>
>>
>>
This comes in handy once you realize that the core functions will sometimes
return different types than you expected:

user=> (type (range 4))
clojure.lang.LazySeq

user=> (reduce conj clojure.lang.PersistentQueue/EMPTY [0 1 2 3])
#<PersistentQueue clojure.lang.PersistentQueue@e44e33f5>

user=> (type '(0 1 2 3))
clojure.lang.PersistentList

user=> (type (subvec [0 1 2 3 4 5] 0 4))
clojure.lang.APersistentVector$SubVector

user=> (type (vals {1 1 2 2 3 3 4 4}))
clojure.lang.APersistentMap$ValSeq

Putting it all together:

user => (=  (reduce conj clojure.lang.PersistentQueue/EMPTY [0 1 2 3])
                 (range 4)
                 '(0 1 2 3)
                 (subvec [0 1 2 3 4 5] 0 4)
                 (vals {0 0 1 1 2 2 3 3}))

true

That right there is real power my friends.

Timothy

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to