We had this discussion at length in several places (clojure mailing list, clojure-dev mailing list, reddit probably) over a year ago when any? was added in 1.9.0-alpha10. Search the archives for the prior discussions, I don't have time right now to re-summarize it all.
On Sunday, October 8, 2017 at 11:56:11 AM UTC-5, Timothy Dean wrote: > > If the ship has sailed, why, then, the ship has sailed. I only send this > now because I'd already written it before I saw your reply, Alex. > > I do not think `any?` is a "gigantic" mistake, though I do think it is > confusing. I expect to see a few some?/any? bugs from beginners. `some?` > and `any? essentially represent two English synonyms, both defined in the > same namespace, each of which represents a check for existence, under two > competing ontological frameworks. > > The bandit stopped me, asking, "Do you have Anything?" > "I do," I said, "please don't hurt me." > "If you have Something, hand it over!" > I handed him nothing. > "You said you had Something!" > "No, you asked me if I had Anything!" > "Just hand it over!" > As he was irate and carried a big stick, I gave up and handed him Nothing. > > Ultimately the source of confusions such as this arise from the fact that > Clojure is a language with a concrete token (Something) representing > Nothing. some/any just compounds the confusion. But this problem arises in > certain philosophies of ontology, and there already exists a distinction > that strikes me as being quite natural in common English and a good fit for > Clojure and spec: the distinction between something/nothing and > presence/absence. > > I would propose `present?` as the name to replace `any?`. > > ---- > > But if the ship has sailed, then onward ho! Clojure will still be a great > tool. > > ~Timothy Dean > > On Friday, October 6, 2017 at 5:55:31 PM UTC-6, Alex Miller wrote: >> >> This ship has sailed. >> >> On Oct 6, 2017, at 6:04 PM, Alan Thompson <cloo...@gmail.com> wrote: >> >> Before 1.9.0 is officially released, I would like to propose a revisit to >> the semantic mismatch introduced by the *clojure.core/any? *function. >> >> Many, many people are dissatisfied by the choice of *clojure.core/any?* >> to be defined as *(constantly true)*, which is completely in conflict >> with *clojure.core/not-any?* . After all, any logical person would >> automatically assume that: >> >> (= (not-any? args...) (not (any? args...)) >> >> >> for any set of legal arguments. This follows the well-established >> tradition in Clojure of having negated pairs such as* if* vs *if-not*, >> *when *vs *when-not*, *every? *vs* not-every?*, etc. >> >> However, I can see that it is convenient to say something like this: >> >> (s/fdef clojure.core/declare >> :args (s/cat :names (s/* simple-symbol?)) >> :ret any?) >> >> >> It seems a simple solution to the problem would be to just define some >> keyword specs in place of the globally visible *any? *function. The >> following example shows that we could define *:clojure.spec/pass-all *and >> *:clojure.spec/pass-none* which would could serve as an exact >> replacement for *any? *(& its negative). >> >> (:require [clojure.spec.alpha :as s] ...) >> (deftest demo >> (s/def ::s/pass-all (constantly true)) >> (s/def ::s/pass-none (constantly false)) >> >> (is (s/valid? ::s/pass-all 5 )) >> (is (s/valid? ::s/pass-all "joe" )) >> (is (s/valid? ::s/pass-all { :blah 42 :blue 66 :hut! 'hut! })) >> (is (not (s/valid? ::s/pass-none 5 )))) >> >> >> Since 1.9.0 is not out yet, is not too late to avoid a permanent >> pollution of the language with a gigantic mistake such as *any?*. At >> the very least, the function could be moved to *clojure.spec/any?* from >> *clojure.core*. If we insist on adding this blatant contradiction to >> *clojure.core*, we won't even have the excuse of a committee to blame it >> on. >> >> Alan Thompson >> >> >> >> On Sun, Nov 13, 2016 at 4:15 PM, Nathan Smutz <nsm...@gmail.com >> <https://mail.google.com/mail/?view=cm&fs=1&tf=1&to=nsm...@gmail.com>> >> wrote: >> >>> Is there a Tricky Names for Nubies page? >>> We might save some stack-overflow searches. >>> >>> In the spirit of Honest Trailers: if we named functions for what they do: >>> or -> first-truthy >>> some -> first-satisfying >>> some? -> not-nil? >>> any? -> return-true >>> >>> Are there others? >>> >>> -- >>> 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 >>> <https://mail.google.com/mail/?view=cm&fs=1&tf=1&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 >>> <https://mail.google.com/mail/?view=cm&fs=1&tf=1&to=clojure%2bunsubscr...@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 >>> <https://mail.google.com/mail/?view=cm&fs=1&tf=1&to=clojure%2bunsubscr...@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 Dev" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure-dev...@googlegroups.com. >> To post to this group, send email to cloju...@googlegroups.com. >> Visit this group at https://groups.google.com/group/clojure-dev. >> 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.