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 <javascript:>> > 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 <javascript:>. > To post to this group, send email to cloju...@googlegroups.com > <javascript:>. > 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.