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.

Reply via email to