Re: contains? on String
I always assumed (contains? foo 2) worked because strings are arrays (i.e. vectors) of characters, on some level. -- 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/d/optout.
Re: contains? on String
(get the char at index 4) \c e On Wed, May 13, 2015 at 9:55 PM, Sam Raker sam.ra...@gmail.com wrote: I always assumed (contains? foo 2) worked because strings are arrays (i.e. vectors) of characters, on some level. -- 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/d/optout. -- 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/d/optout.
Re: contains? on String
I agree about the counter-intuitiveness. I'm only wondering whether the error message is a bit misleading contains? not supported on type: java.lang.String because of course (contains? hello 2) works fine. Shantanu On Wednesday, 13 May 2015 00:12:19 UTC+5:30, James Reeves wrote: contains? has always been a little counter-intuitive. It essentially only works on collections that allow for a constant or logarithmic lookup time, and often works on the keys of a collection, rather than its values. The only exception to this are sets, where the values are essentially keys as well. So: (contains? {:a 1} :a) = true (contains? {:a 1} 1) = false (contains? [:a] :a) = false (contains? [:a] 0) = true (contains? #{:a} :a) = true (contains? a \a) = error (contains? '(:a) :a) = error - James On 12 May 2015 at 19:25, Shantanu Kumar kumar.s...@gmail.com javascript: wrote: Hi, I notice the following in Clojure 1.7.0-beta2: user= (contains? hello 2) true user= (contains? hello \e) IllegalArgumentException contains? not supported on type: java.lang.String clojure.lang.RT.contains (RT.java:800) Is this just a case of misleading error message or am I missing something? Shantanu -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com javascript: Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com javascript: 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+u...@googlegroups.com javascript:. For more options, visit https://groups.google.com/d/optout. -- 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/d/optout.
Re: contains? on String
On May 12, 2015, at 1:54 PM, Shantanu Kumar kumar.shant...@gmail.com wrote: I agree about the counter-intuitiveness. I'm only wondering whether the error message is a bit misleading contains? not supported on type: java.lang.String because of course (contains? hello 2) works fine. It seems odd that (contains? abc 2) works, at least to me. It's clearly intentional, from this line in RT.java: else if(key instanceof Number (coll instanceof String || coll.getClass().isArray())) { Can anyone comment on why Strings are explicitly supported here? -- 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/d/optout.
Re: contains? on String
On 12 May 2015 at 19:54, Shantanu Kumar kumar.shant...@gmail.com wrote: I agree about the counter-intuitiveness. I'm only wondering whether the error message is a bit misleading contains? not supported on type: java.lang.String because of course (contains? hello 2) works fine. Oh, I see! Yes, that is a bit misleading. - James -- 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/d/optout.
Re: contains? on String
contains? has always been a little counter-intuitive. It essentially only works on collections that allow for a constant or logarithmic lookup time, and often works on the keys of a collection, rather than its values. The only exception to this are sets, where the values are essentially keys as well. So: (contains? {:a 1} :a) = true (contains? {:a 1} 1) = false (contains? [:a] :a) = false (contains? [:a] 0) = true (contains? #{:a} :a) = true (contains? a \a) = error (contains? '(:a) :a) = error - James On 12 May 2015 at 19:25, Shantanu Kumar kumar.shant...@gmail.com wrote: Hi, I notice the following in Clojure 1.7.0-beta2: user= (contains? hello 2) true user= (contains? hello \e) IllegalArgumentException contains? not supported on type: java.lang.String clojure.lang.RT.contains (RT.java:800) Is this just a case of misleading error message or am I missing something? Shantanu -- 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/d/optout. -- 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/d/optout.
Re: contains? on String
On Tuesday, May 12, 2015 at 3:34:46 PM UTC-4, Michael Gardner wrote: On May 12, 2015, at 1:54 PM, Shantanu Kumar kumar.s...@gmail.com javascript: wrote: I agree about the counter-intuitiveness. I'm only wondering whether the error message is a bit misleading contains? not supported on type: java.lang.String because of course (contains? hello 2) works fine. It seems odd that (contains? abc 2) works, at least to me. It's clearly intentional, from this line in RT.java: else if(key instanceof Number (coll instanceof String || coll.getClass().isArray())) { Can anyone comment on why Strings are explicitly supported here? Strings and arrays support constant-time access by index. The thing that's broken is contains? not supported on type: java.lang.String instead of nil when a nonnumeric key is used. One gets nil with a nonnumeric key and a PersistentVector, rather than an exception. -- 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/d/optout.
Re: contains? on String
On May 12, 2015, at 3:28 PM, Fluid Dynamics a2093...@trbvm.com wrote: Strings and arrays support constant-time access by index. Yes, but why should that mean that contains? should work on Strings? Because it can doesn't seem compelling to me. In discussions about contains?, one often hears that it works on associative containers, which is supported by the use of the word key in its docstring. Vectors are indeed associative, but Strings aren't (at least according to associative?), which is why this seems like a strange feature to me. -- 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/d/optout.
Re: contains? on String
Ignoring some of the conversation here to point out that what you want is: (.contains foo f) On Tue, May 12, 2015 at 4:04 PM, Michael Gardner gardne...@gmail.com wrote: On May 12, 2015, at 3:28 PM, Fluid Dynamics a2093...@trbvm.com wrote: Strings and arrays support constant-time access by index. Yes, but why should that mean that contains? should work on Strings? Because it can doesn't seem compelling to me. In discussions about contains?, one often hears that it works on associative containers, which is supported by the use of the word key in its docstring. Vectors are indeed associative, but Strings aren't (at least according to associative?), which is why this seems like a strange feature to me. -- 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/d/optout. -- 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/d/optout.
Re: contains? on String
On May 12, 2015, at 4:28 PM, Fluid Dynamics a2093...@trbvm.com wrote: On Tuesday, May 12, 2015 at 3:34:46 PM UTC-4, Michael Gardner wrote: On May 12, 2015, at 1:54 PM, Shantanu Kumar kumar.s...@gmail.com javascript: wrote: I agree about the counter-intuitiveness. I'm only wondering whether the error message is a bit misleading contains? not supported on type: java.lang.String because of course (contains? hello 2) works fine. Can anyone comment on why Strings are explicitly supported here? Strings and arrays support constant-time access by index. The thing that's broken is contains? not supported on type: java.lang.String instead of nil when a nonnumeric key is used. One gets nil with a nonnumeric key and a PersistentVector, rather than an exception. The contains? function is just badly named, spawning a couple of different kinds of confusion. I know it's not going to change -- the problems have been pointed out for years. But FWIW I find it's usually best to pretend it doesn't exist, and when my students run into trouble with it I suggest that they do the same. -Lee -- 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/d/optout.
Re: contains? on String
On Tuesday, May 12, 2015 at 5:05:00 PM UTC-4, Michael Gardner wrote: On May 12, 2015, at 3:28 PM, Fluid Dynamics a209...@trbvm.com javascript: wrote: Strings and arrays support constant-time access by index. Yes, but why should that mean that contains? should work on Strings? Because it can doesn't seem compelling to me. In discussions about contains?, one often hears that it works on associative containers, which is supported by the use of the word key in its docstring. Vectors are indeed associative, but Strings aren't (at least according to associative?), which is why this seems like a strange feature to me. Yes; and presumably you can't produce a string with one character changed using assoc either. But it should work consistently. Either it shouldn't work for strings, or it should work fully, including producing nil for not-found with nonnumeric keys. Ditto arrays. -- 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/d/optout.