On Wed, Dec 2, 2009 at 10:10 AM, Stefan Kamphausen
<ska2...@googlemail.com>wrote:


> OK, the doc of contains? told me that for indexed collection-types it
> will only check, whether the index is within the valid range.  So
> maybe:
>
> user> (contains? (list 1 2 3) 1)
> false
>
> At that point I dived into the implementation and found that in
> RT.java checks for the type of collection passed but leaves out
> PersistenList.
>
> I'd like to understand the (probably well-grounded) reason for that.
> As far as I can see PersistentList extends Counted, so the check for
> the index-range should at least be possible.  However, I think people
> would expect an equality check in the background, which OTOH would be O
> (N), probably.


It was my impression that in Clojure, lists aren't numerically indexed
collections. That might explain the following:

user=> (contains? '(1 2 3) 1)
false
user=> ('(1 2 3) 1)
java.lang.ClassCastException: clojure.lang.PersistentList (NO_SOURCE_FILE:0)

even though:

user=> (contains? [1 2 3] 1)
true
user=> ([1 2 3] 1)
2

But I might be mistaken, so take this as speculation rather than
explanation.

e

-- 
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