Re: contains? for vectors

2013-03-01 Thread Michael Gardner
On Feb 28, 2013, at 17:17 , AtKaaZ atk...@gmail.com wrote:

 According to this, can a vector have keys that are not numbers? like :a , if 
 not, then wouldn't it make more sense that
 (contains? [:a :b :c] :a)  would throw ? It's probably just me.

This is a reasonable point, and one I haven't seen made before. The only 
problem I can see with throwing an exception is that one might sometimes wish 
to deal with associative containers in a generic fashion, and thus end up 
asking a vector if it contains a keyword or a string without doing so 
explicitly. In that case you'd not want it to throw an exception any more than 
the other associative collection types would.

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: contains? for vectors

2013-03-01 Thread AtKaaZ
I don't think I understand what you mean (could you rephrase/example?), I
cannot think of a case when I wouldn't want it to throw when I'm passing a
non-number (contains? [:a :b :c] :a), I mean, rather than just silently
ignoring.
It;s not unlike this:
= (contains? '(:a :b :c) :a)
IllegalArgumentException contains? not supported on type:
clojure.lang.PersistentList  clojure.lang.RT.contains (RT.java:724)

it throws because, it's similarly better than just ignoring it and
propagating the bug somewhere else.

I don't know about others but, I would prefer if the constraints of a
function's definition are violated by ie. devs calling it wrongly (maybe
not even anticipating that it could be called wrongly due to it being like
generic - perhaps in a manner that you've explained and I didn't quite
understand) are enforced and exceptions thrown rather than silently
ignoring therefore allowing subtle bugs.

In a way, it's already so for String:
= (contains? aaa 1)
true
= (contains? aaa 3)
false
= (contains? aaa a)
IllegalArgumentException contains? not supported on type: java.lang.String
clojure.lang.RT.contains (RT.java:724)
= (contains? aaa 'a)
IllegalArgumentException contains? not supported on type: java.lang.String
clojure.lang.RT.contains (RT.java:724)

Where it's almost as what I'd want for vector to be, namely: the valid keys
numbers, are allowed, but when invalid keys are used ie. symbol or other
strings, then exception is thrown; but not so for vectors; Granted that the
exception thrown seems to be saying something other than: bad key type for
passed collection (or so) but still...

= (contains? [1 3 4] 2)
true
= (contains? [1 3 4] '2)
true
= (contains? [1 3 4] 2)
false

So if you were to use this generically on any collection, you'd maybe
expect it to throw for vector as it does for string collection.

Thanks for replying, Michael.


On Fri, Mar 1, 2013 at 6:03 PM, Michael Gardner gardne...@gmail.com wrote:

 On Feb 28, 2013, at 17:17 , AtKaaZ atk...@gmail.com wrote:

  According to this, can a vector have keys that are not numbers? like :a
 , if not, then wouldn't it make more sense that
  (contains? [:a :b :c] :a)  would throw ? It's probably just me.

 This is a reasonable point, and one I haven't seen made before. The only
 problem I can see with throwing an exception is that one might sometimes
 wish to deal with associative containers in a generic fashion, and thus end
 up asking a vector if it contains a keyword or a string without doing so
 explicitly. In that case you'd not want it to throw an exception any more
 than the other associative collection types would.

 --
 --
 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
 ---
 You received this message because you are subscribed to the Google Groups
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an
 email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/groups/opt_out.





-- 
Please correct me if I'm wrong or incomplete,
even if you think I'll subconsciously hate it.

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: contains? for vectors

2013-03-01 Thread Maik Schünemann
the old contails? debate :)
contains? is only intented for associative collections. This explains
(somewhat) the behavior on vectors.
They are seen as assocuative collections from indexes to values.
I'm not exactly sure about this, but I expect
(contains? c x)  to be true if you can call (get c x). (and get a truthy
result except if the value is defined but nil)
To test if a sequential collection contains the value just call .contains
or use the (some #{x} c) idiom.

The name IS misleading but after you read the docs it should be clear so i
don't think the behaviour of contains? has to be changed.
Greetings


On Fri, Mar 1, 2013 at 8:36 PM, AtKaaZ atk...@gmail.com wrote:

 I don't think I understand what you mean (could you rephrase/example?), I
 cannot think of a case when I wouldn't want it to throw when I'm passing a
 non-number (contains? [:a :b :c] :a), I mean, rather than just silently
 ignoring.
 It;s not unlike this:
 = (contains? '(:a :b :c) :a)

 IllegalArgumentException contains? not supported on type:
 clojure.lang.PersistentList  clojure.lang.RT.contains (RT.java:724)

 it throws because, it's similarly better than just ignoring it and
 propagating the bug somewhere else.

 I don't know about others but, I would prefer if the constraints of a
 function's definition are violated by ie. devs calling it wrongly (maybe
 not even anticipating that it could be called wrongly due to it being like
 generic - perhaps in a manner that you've explained and I didn't quite
 understand) are enforced and exceptions thrown rather than silently
 ignoring therefore allowing subtle bugs.

 In a way, it's already so for String:
 = (contains? aaa 1)
 true
 = (contains? aaa 3)
 false
 = (contains? aaa a)

 IllegalArgumentException contains? not supported on type:
 java.lang.String  clojure.lang.RT.contains (RT.java:724)
 = (contains? aaa 'a)

 IllegalArgumentException contains? not supported on type:
 java.lang.String  clojure.lang.RT.contains (RT.java:724)

 Where it's almost as what I'd want for vector to be, namely: the valid
 keys numbers, are allowed, but when invalid keys are used ie. symbol or
 other strings, then exception is thrown; but not so for vectors; Granted
 that the exception thrown seems to be saying something other than: bad key
 type for passed collection (or so) but still...

 = (contains? [1 3 4] 2)
 true
 = (contains? [1 3 4] '2)
 true
 = (contains? [1 3 4] 2)
 false

 So if you were to use this generically on any collection, you'd maybe
 expect it to throw for vector as it does for string collection.

 Thanks for replying, Michael.


 On Fri, Mar 1, 2013 at 6:03 PM, Michael Gardner gardne...@gmail.comwrote:

 On Feb 28, 2013, at 17:17 , AtKaaZ atk...@gmail.com wrote:

  According to this, can a vector have keys that are not numbers? like :a
 , if not, then wouldn't it make more sense that
  (contains? [:a :b :c] :a)  would throw ? It's probably just me.

 This is a reasonable point, and one I haven't seen made before. The only
 problem I can see with throwing an exception is that one might sometimes
 wish to deal with associative containers in a generic fashion, and thus end
 up asking a vector if it contains a keyword or a string without doing so
 explicitly. In that case you'd not want it to throw an exception any more
 than the other associative collection types would.

 --
 --
 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
 ---
 You received this message because you are subscribed to the Google Groups
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an
 email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/groups/opt_out.





 --
 Please correct me if I'm wrong or incomplete,
 even if you think I'll subconsciously hate it.

  --
 --
 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
 ---
 You received this message because you are subscribed to the Google Groups
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an
 email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/groups/opt_out.




-- 
-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, 

Re: contains? for vectors

2013-03-01 Thread Michael Gardner
On Mar 1, 2013, at 13:36 , AtKaaZ atk...@gmail.com wrote:

 I don't think I understand what you mean (could you rephrase/example?), I 
 cannot think of a case when I wouldn't want it to throw when I'm passing a 
 non-number (contains? [:a :b :c] :a), I mean, rather than just silently 
 ignoring.

I'm talking about a case where you have one or more associative containers of 
unknown types, and you want to be able to generically ask them whether they 
contain a particular key. E.g.:

(defn has-foo? [c] ;; c is only known to be Associative
  (contains? c :foo))

Insofar as a vector can be viewed as a kind of associative container, one might 
expect/desire this code to just return false if c happens to be a vector. One 
could see this as a question about the contract promised by the Associative 
interface: is is always OK to ask an Associative container whether it contains 
a given key, or are implementations free to accept only certain kinds of keys? 
I could go either way on that personally, but I can't find any docs that 
support one interpretation or the other.

 It;s not unlike this:
 = (contains? '(:a :b :c) :a)
 IllegalArgumentException contains? not supported on type: 
 clojure.lang.PersistentList  clojure.lang.RT.contains (RT.java:724)
 
 it throws because, it's similarly better than just ignoring it and 
 propagating the bug somewhere else.

Different case, because lists aren't Associative.

 In a way, it's already so for String:
 = (contains? aaa 1)
 true
 = (contains? aaa 3)
 false
 = (contains? aaa a)
 IllegalArgumentException contains? not supported on type: java.lang.String  
 clojure.lang.RT.contains (RT.java:724)
 = (contains? aaa 'a)
 IllegalArgumentException contains? not supported on type: java.lang.String  
 clojure.lang.RT.contains (RT.java:724)

This one's actually quite surprising to me. I don't know why 'contains? throws 
when given a String and a non-numeric argument, since that's inconsistent with 
its behavior on vectors (and the exception's description seems inaccurate, 
since 'contains? *is* supported on Strings). Even more strangely:

user= (contains? abc 1.5)
true

I have no explanation for this.

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: contains? for vectors

2013-03-01 Thread AtKaaZ
Right, but I'm only after the when-invalid-key is passed:
valid:
= (contains? abc 1)
true
= (contains? [a b c] 1)
true

invalid:
= (contains? abc a)
IllegalArgumentException contains? not supported on type: java.lang.String
clojure.lang.RT.contains (RT.java:724)
= (contains? [a b c] a)
false


On Fri, Mar 1, 2013 at 9:02 PM, Maik Schünemann
maikschuenem...@gmail.comwrote:

 the old contails? debate :)
 contains? is only intented for associative collections. This explains
 (somewhat) the behavior on vectors.
 They are seen as assocuative collections from indexes to values.
 I'm not exactly sure about this, but I expect
 (contains? c x)  to be true if you can call (get c x). (and get a truthy
 result except if the value is defined but nil)
 To test if a sequential collection contains the value just call .contains
 or use the (some #{x} c) idiom.

 The name IS misleading but after you read the docs it should be clear so i
 don't think the behaviour of contains? has to be changed.
 Greetings


 On Fri, Mar 1, 2013 at 8:36 PM, AtKaaZ atk...@gmail.com wrote:

 I don't think I understand what you mean (could you rephrase/example?), I
 cannot think of a case when I wouldn't want it to throw when I'm passing a
 non-number (contains? [:a :b :c] :a), I mean, rather than just silently
 ignoring.
 It;s not unlike this:
 = (contains? '(:a :b :c) :a)

 IllegalArgumentException contains? not supported on type:
 clojure.lang.PersistentList  clojure.lang.RT.contains (RT.java:724)

 it throws because, it's similarly better than just ignoring it and
 propagating the bug somewhere else.

 I don't know about others but, I would prefer if the constraints of a
 function's definition are violated by ie. devs calling it wrongly (maybe
 not even anticipating that it could be called wrongly due to it being like
 generic - perhaps in a manner that you've explained and I didn't quite
 understand) are enforced and exceptions thrown rather than silently
 ignoring therefore allowing subtle bugs.

 In a way, it's already so for String:
 = (contains? aaa 1)
 true
 = (contains? aaa 3)
 false
 = (contains? aaa a)

 IllegalArgumentException contains? not supported on type:
 java.lang.String  clojure.lang.RT.contains (RT.java:724)
 = (contains? aaa 'a)

 IllegalArgumentException contains? not supported on type:
 java.lang.String  clojure.lang.RT.contains (RT.java:724)

 Where it's almost as what I'd want for vector to be, namely: the valid
 keys numbers, are allowed, but when invalid keys are used ie. symbol or
 other strings, then exception is thrown; but not so for vectors; Granted
 that the exception thrown seems to be saying something other than: bad key
 type for passed collection (or so) but still...

 = (contains? [1 3 4] 2)
 true
 = (contains? [1 3 4] '2)
 true
 = (contains? [1 3 4] 2)
 false

 So if you were to use this generically on any collection, you'd maybe
 expect it to throw for vector as it does for string collection.

 Thanks for replying, Michael.


 On Fri, Mar 1, 2013 at 6:03 PM, Michael Gardner gardne...@gmail.comwrote:

 On Feb 28, 2013, at 17:17 , AtKaaZ atk...@gmail.com wrote:

  According to this, can a vector have keys that are not numbers? like
 :a , if not, then wouldn't it make more sense that
  (contains? [:a :b :c] :a)  would throw ? It's probably just me.

 This is a reasonable point, and one I haven't seen made before. The only
 problem I can see with throwing an exception is that one might sometimes
 wish to deal with associative containers in a generic fashion, and thus end
 up asking a vector if it contains a keyword or a string without doing so
 explicitly. In that case you'd not want it to throw an exception any more
 than the other associative collection types would.

 --
 --
 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
 ---
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send
 an email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/groups/opt_out.





 --
 Please correct me if I'm wrong or incomplete,
 even if you think I'll subconsciously hate it.

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

Re: contains? for vectors

2013-03-01 Thread AtKaaZ
user= (contains? abc 1.5)
true

looks like for that, it's coerced to int

else if(key instanceof Number  (coll instanceof String ||
coll.getClass().isArray())) {
int n = ((Number) key).intValue();
return n = 0  n  count(coll);
}
= (int 1.4)
1
= (int 1.6)
1
= (.intValue 1.4)
1
= (.intValue 1.6)
1



On Fri, Mar 1, 2013 at 9:05 PM, Michael Gardner gardne...@gmail.com wrote:

 On Mar 1, 2013, at 13:36 , AtKaaZ atk...@gmail.com wrote:

  I don't think I understand what you mean (could you rephrase/example?),
 I cannot think of a case when I wouldn't want it to throw when I'm passing
 a non-number (contains? [:a :b :c] :a), I mean, rather than just silently
 ignoring.

 I'm talking about a case where you have one or more associative containers
 of unknown types, and you want to be able to generically ask them whether
 they contain a particular key. E.g.:

 (defn has-foo? [c] ;; c is only known to be Associative
   (contains? c :foo))

 Insofar as a vector can be viewed as a kind of associative container, one
 might expect/desire this code to just return false if c happens to be a
 vector. One could see this as a question about the contract promised by the
 Associative interface: is is always OK to ask an Associative container
 whether it contains a given key, or are implementations free to accept only
 certain kinds of keys? I could go either way on that personally, but I
 can't find any docs that support one interpretation or the other.

  It;s not unlike this:
  = (contains? '(:a :b :c) :a)
  IllegalArgumentException contains? not supported on type:
 clojure.lang.PersistentList  clojure.lang.RT.contains (RT.java:724)
 
  it throws because, it's similarly better than just ignoring it and
 propagating the bug somewhere else.

 Different case, because lists aren't Associative.

  In a way, it's already so for String:
  = (contains? aaa 1)
  true
  = (contains? aaa 3)
  false
  = (contains? aaa a)
  IllegalArgumentException contains? not supported on type:
 java.lang.String  clojure.lang.RT.contains (RT.java:724)
  = (contains? aaa 'a)
  IllegalArgumentException contains? not supported on type:
 java.lang.String  clojure.lang.RT.contains (RT.java:724)

 This one's actually quite surprising to me. I don't know why 'contains?
 throws when given a String and a non-numeric argument, since that's
 inconsistent with its behavior on vectors (and the exception's description
 seems inaccurate, since 'contains? *is* supported on Strings). Even more
 strangely:

 user= (contains? abc 1.5)
 true

 I have no explanation for this.

 --
 --
 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
 ---
 You received this message because you are subscribed to the Google Groups
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an
 email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/groups/opt_out.





-- 
Please correct me if I'm wrong or incomplete,
even if you think I'll subconsciously hate it.

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: contains? for vectors

2013-03-01 Thread AtKaaZ
and obviously I would like it to throw here instead :) but hey, that's just
me - overly obsessed with fail-fast rather that performance first or
tolerance


On Fri, Mar 1, 2013 at 9:12 PM, AtKaaZ atk...@gmail.com wrote:

 user= (contains? abc 1.5)
 true

 looks like for that, it's coerced to int

 else if(key instanceof Number  (coll instanceof String ||
 coll.getClass().isArray())) {
 int n = ((Number) key).intValue();
 return n = 0  n  count(coll);
 }
 = (int 1.4)
 1
 = (int 1.6)
 1
 = (.intValue 1.4)
 1
 = (.intValue 1.6)
 1



 On Fri, Mar 1, 2013 at 9:05 PM, Michael Gardner gardne...@gmail.comwrote:

 On Mar 1, 2013, at 13:36 , AtKaaZ atk...@gmail.com wrote:

  I don't think I understand what you mean (could you rephrase/example?),
 I cannot think of a case when I wouldn't want it to throw when I'm passing
 a non-number (contains? [:a :b :c] :a), I mean, rather than just silently
 ignoring.

 I'm talking about a case where you have one or more associative
 containers of unknown types, and you want to be able to generically ask
 them whether they contain a particular key. E.g.:

 (defn has-foo? [c] ;; c is only known to be Associative
   (contains? c :foo))

 Insofar as a vector can be viewed as a kind of associative container, one
 might expect/desire this code to just return false if c happens to be a
 vector. One could see this as a question about the contract promised by the
 Associative interface: is is always OK to ask an Associative container
 whether it contains a given key, or are implementations free to accept only
 certain kinds of keys? I could go either way on that personally, but I
 can't find any docs that support one interpretation or the other.

  It;s not unlike this:
  = (contains? '(:a :b :c) :a)
  IllegalArgumentException contains? not supported on type:
 clojure.lang.PersistentList  clojure.lang.RT.contains (RT.java:724)
 
  it throws because, it's similarly better than just ignoring it and
 propagating the bug somewhere else.

 Different case, because lists aren't Associative.

  In a way, it's already so for String:
  = (contains? aaa 1)
  true
  = (contains? aaa 3)
  false
  = (contains? aaa a)
  IllegalArgumentException contains? not supported on type:
 java.lang.String  clojure.lang.RT.contains (RT.java:724)
  = (contains? aaa 'a)
  IllegalArgumentException contains? not supported on type:
 java.lang.String  clojure.lang.RT.contains (RT.java:724)

 This one's actually quite surprising to me. I don't know why 'contains?
 throws when given a String and a non-numeric argument, since that's
 inconsistent with its behavior on vectors (and the exception's description
 seems inaccurate, since 'contains? *is* supported on Strings). Even more
 strangely:

 user= (contains? abc 1.5)
 true

 I have no explanation for this.

 --
 --
 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
 ---
 You received this message because you are subscribed to the Google Groups
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an
 email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/groups/opt_out.





 --
 Please correct me if I'm wrong or incomplete,
 even if you think I'll subconsciously hate it.




-- 
Please correct me if I'm wrong or incomplete,
even if you think I'll subconsciously hate it.

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: contains? for vectors

2013-02-28 Thread AtKaaZ
= *(contains? '(1 2 3) 1)*
IllegalArgumentException contains? not supported on type:
clojure.lang.PersistentList  clojure.lang.RT.contains (RT.java:724)

= **clojure-version**
{:major 1, :minor 5, :incremental 0, :qualifier RC17}


= *(contains? foo o)*
IllegalArgumentException contains? not supported on type: java.lang.String
clojure.lang.RT.contains (RT.java:724)

= *(contains? [:a :b :c] :a)*
false

whoops

contains? clojure.core

Argument Lists:
[coll key]

Documentation:
Returns true if key is present in the given collection, otherwise
  returns false.  Note that for numerically indexed collections like
  vectors and Java arrays, this tests if the numeric key is within the
  range of indexes. 'contains?' operates constant or logarithmic
   time;
  it will not perform a linear search for a value.  See also 'some'.

= (contains? '[:a :b :c] 1)
true
= (contains? '[:a :b :c] 3)
false
= (contains? '[:a :b :c] 2)
true

well, I would not have expected that


On Thu, Feb 28, 2013 at 11:14 PM, Irakli Gozalishvili rfo...@gmail.comwrote:

  Hi,

 Function 
 contains?http://clojuredocs.org/clojure_core/clojure.core/contains_q returns
 true if key is present in the given collection, although arguably on some
 data structures
 one would expect behaviour to be different. In fact it's already different
 on sets:

 (contains? #{:a :b :c} :a) ; = true

 Would that be reasonable to change behaviour for other types too like:

 (contains? [:a :b :c] :a)   ; = false
 (contains? foo o)   ; = false
 (contains? '(1 2 3) 1)   ; = false

 So they do return `true` instead ?

 If that will break too much code, maybe some other function can be added
 instead ?

 Regards
 --
 Irakli Gozalishvili
 Web: http://www.jeditoolkit.com/

  --
 --
 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
 ---
 You received this message because you are subscribed to the Google Groups
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an
 email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/groups/opt_out.






-- 
Please correct me if I'm wrong or incomplete,
even if you think I'll subconsciously hate it.

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: contains? for vectors

2013-02-28 Thread AtKaaZ
On Thu, Feb 28, 2013 at 11:23 PM, AtKaaZ atk...@gmail.com wrote:

 = *(contains? '(1 2 3) 1)*
 IllegalArgumentException contains? not supported on type:
 clojure.lang.PersistentList  clojure.lang.RT.contains (RT.java:724)

 = **clojure-version**
 {:major 1, :minor 5, :incremental 0, :qualifier RC17}


 = *(contains? foo o)*
 IllegalArgumentException contains? not supported on type:
 java.lang.String  clojure.lang.RT.contains (RT.java:724)

 = *(contains? [:a :b :c] :a)*
 false

 whoops

 contains? clojure.core

 Argument Lists:
 [coll key]

 Documentation:
 Returns true if key is present in the given collection, otherwise
   returns false.  Note that for numerically indexed collections like
   vectors and Java arrays, this tests if the numeric key is within the
   range of indexes. 'contains?' operates constant or logarithmic
time;
   it will not perform a linear search for a value.  See also 'some'.

 = (contains? '[:a :b :c] 1)
 true
 = (contains? '[:a :b :c] 3)
 false
 = (contains? '[:a :b :c] 2)
 true

 well, I would not have expected that

 the code for that is this:
clojure.lang.APersistentVector.containsKey(Object)

public boolean containsKey(Object key){
if(!(Util.isInteger(key)))
return false;
int i = ((Number) key).intValue();
return i = 0  i  count();
}

if you ask me, it should throw rather than return false, that is, if anyone
cares about not introducing subtle errors easily


 On Thu, Feb 28, 2013 at 11:14 PM, Irakli Gozalishvili rfo...@gmail.comwrote:

  Hi,

 Function 
 contains?http://clojuredocs.org/clojure_core/clojure.core/contains_q 
 returns
 true if key is present in the given collection, although arguably on some
 data structures
 one would expect behaviour to be different. In fact it's already
 different on sets:

 (contains? #{:a :b :c} :a) ; = true

 Would that be reasonable to change behaviour for other types too like:

 (contains? [:a :b :c] :a)   ; = false
 (contains? foo o)   ; = false
 (contains? '(1 2 3) 1)   ; = false

 So they do return `true` instead ?

 If that will break too much code, maybe some other function can be added
 instead ?

 Regards
 --
 Irakli Gozalishvili
 Web: http://www.jeditoolkit.com/

  --
 --
 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
 ---
 You received this message because you are subscribed to the Google Groups
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an
 email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/groups/opt_out.






 --
 Please correct me if I'm wrong or incomplete,
 even if you think I'll subconsciously hate it.




-- 
Please correct me if I'm wrong or incomplete,
even if you think I'll subconsciously hate it.

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: contains? for vectors

2013-02-28 Thread AtKaaZ
by errors I mean bugs


On Thu, Feb 28, 2013 at 11:43 PM, AtKaaZ atk...@gmail.com wrote:




 On Thu, Feb 28, 2013 at 11:23 PM, AtKaaZ atk...@gmail.com wrote:

 = *(contains? '(1 2 3) 1)*
 IllegalArgumentException contains? not supported on type:
 clojure.lang.PersistentList  clojure.lang.RT.contains (RT.java:724)

 = **clojure-version**
 {:major 1, :minor 5, :incremental 0, :qualifier RC17}


 = *(contains? foo o)*
 IllegalArgumentException contains? not supported on type:
 java.lang.String  clojure.lang.RT.contains (RT.java:724)

 = *(contains? [:a :b :c] :a)*
 false

 whoops

 contains? clojure.core

 Argument Lists:
 [coll key]

 Documentation:
 Returns true if key is present in the given collection, otherwise
   returns false.  Note that for numerically indexed collections like
   vectors and Java arrays, this tests if the numeric key is within the
   range of indexes. 'contains?' operates constant or logarithmic
time;
   it will not perform a linear search for a value.  See also 'some'.

 = (contains? '[:a :b :c] 1)
 true
 = (contains? '[:a :b :c] 3)
 false
 = (contains? '[:a :b :c] 2)
 true

 well, I would not have expected that

 the code for that is this:
 clojure.lang.APersistentVector.containsKey(Object)

 public boolean containsKey(Object key){
 if(!(Util.isInteger(key)))
 return false;
 int i = ((Number) key).intValue();
 return i = 0  i  count();
 }

 if you ask me, it should throw rather than return false, that is, if
 anyone cares about not introducing subtle errors easily


 On Thu, Feb 28, 2013 at 11:14 PM, Irakli Gozalishvili 
 rfo...@gmail.comwrote:

  Hi,

 Function 
 contains?http://clojuredocs.org/clojure_core/clojure.core/contains_q 
 returns
 true if key is present in the given collection, although arguably on some
 data structures
 one would expect behaviour to be different. In fact it's already
 different on sets:

 (contains? #{:a :b :c} :a) ; = true

 Would that be reasonable to change behaviour for other types too like:

 (contains? [:a :b :c] :a)   ; = false
 (contains? foo o)   ; = false
 (contains? '(1 2 3) 1)   ; = false

 So they do return `true` instead ?

 If that will break too much code, maybe some other function can be added
 instead ?

 Regards
 --
 Irakli Gozalishvili
 Web: http://www.jeditoolkit.com/

  --
 --
 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
 ---
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send
 an email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/groups/opt_out.






 --
 Please correct me if I'm wrong or incomplete,
 even if you think I'll subconsciously hate it.




 --
 Please correct me if I'm wrong or incomplete,
 even if you think I'll subconsciously hate it.




-- 
Please correct me if I'm wrong or incomplete,
even if you think I'll subconsciously hate it.

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: contains? for vectors

2013-02-28 Thread Michael Gardner
This is a sore spot that has been discussed many times on this list[1]. The 
short version is that many people agree that the name contains? is misleading 
to newcomers, but according to Rich it's not changing any time soon[2]. What 
you want for linear searches is 'some (as mentioned in the doc for 'contains?).

Also, why are you quoting your vectors (e.g. '[:a :b :c] instead of just [:a :b 
:c])?

[1] Most recently, 
https://groups.google.com/d/msg/clojure/wNFdG11zMMo/OC9ezSn9nRAJ
[2] https://groups.google.com/d/msg/clojure/bSrSb61u-_8/3-wjAkJ4VJgJ

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: contains? for vectors

2013-02-28 Thread AtKaaZ
On Thu, Feb 28, 2013 at 11:59 PM, Michael Gardner gardne...@gmail.comwrote:

 This is a sore spot that has been discussed many times on this list[1].
 The short version is that many people agree that the name contains? is
 misleading to newcomers, but according to Rich it's not changing any time
 soon[2]. What you want for linear searches is 'some (as mentioned in the
 doc for 'contains?).

 Also, why are you quoting your vectors (e.g. '[:a :b :c] instead of just
 [:a :b :c])?

I accidentally quoted those in my repl tries and I ended up recalling the
last variant (Ctrl+Up in repl) when I tried the 1 3 2 params.


 [1] Most recently,
 https://groups.google.com/d/msg/clojure/wNFdG11zMMo/OC9ezSn9nRAJ
 [2] https://groups.google.com/d/msg/clojure/bSrSb61u-_8/3-wjAkJ4VJgJ

Thank you for the links Michael.


Ambrose Bonnaire-Sergeant
9/3/12
  'contains?' tests if a key is in a collection.

Vector is an associative data structure, with keys being indexes.
A vector of length 3 has the key 2, but not key 3.


According to this, can a vector have keys that are not numbers? like :a ,
if not, then wouldn't it make more sense that
(contains? [:a :b :c] :a)  would throw ? It's probably just me.

Thanks.





--
 --
 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
 ---
 You received this message because you are subscribed to the Google Groups
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an
 email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/groups/opt_out.





-- 
Please correct me if I'm wrong or incomplete,
even if you think I'll subconsciously hate it.

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: contains? for vectors

2013-02-28 Thread Irakli Gozalishvili
Thanks Michael,

This links are helpful. As far as I can see nothing like contains-val? or 
seq-contains? has being added though :(
I'm trying to use cljs for performance sensitive code and high order functions 
like `some` don't really do it, while
indexOf on strings in JS are well optimised by engines.

Maybe something else can be considered like `includes?` to do that instead ? 
Also Rich says no better name was
suggest for includes?, I think `has?` would have being a lot better name. Don't 
know if it makes sense to reply to that
post at this point.


Regards
--
Irakli Gozalishvili
Web: http://www.jeditoolkit.com/


On Thursday, 2013-02-28 at 14:59 , Michael Gardner wrote:

 This is a sore spot that has been discussed many times on this list[1]. The 
 short version is that many people agree that the name contains? is 
 misleading to newcomers, but according to Rich it's not changing any time 
 soon[2]. What you want for linear searches is 'some (as mentioned in the doc 
 for 'contains?).
 
 Also, why are you quoting your vectors (e.g. '[:a :b :c] instead of just [:a 
 :b :c])?
 
 [1] Most recently, 
 https://groups.google.com/d/msg/clojure/wNFdG11zMMo/OC9ezSn9nRAJ
 [2] https://groups.google.com/d/msg/clojure/bSrSb61u-_8/3-wjAkJ4VJgJ
 
 -- 
 -- 
 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 
 (mailto: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 
 (mailto:clojure+unsubscr...@googlegroups.com)
 For more options, visit this group at
 http://groups.google.com/group/clojure?hl=en
 --- 
 You received this message because you are subscribed to the Google Groups 
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an 
 email to clojure+unsubscr...@googlegroups.com 
 (mailto:clojure+unsubscr...@googlegroups.com).
 For more options, visit https://groups.google.com/groups/opt_out.
 
 


-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.




Re: contains? for vectors

2013-02-28 Thread Tassilo Horn
Irakli Gozalishvili rfo...@gmail.com writes:

 Maybe something else can be considered like `includes?` to do that
 instead ?  Also Rich says no better name was suggest for includes?, I
 think `has?` would have being a lot better name. Don't know if it
 makes sense to reply to that post at this point.

I think member? is a rather good name:

(defn member?
  Returns true iff `e` is a member of `coll`.
  [e ^java.util.Collection coll]
  (if (seq coll)
(.contains coll e)
false))

Bye,
Tassilo

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.