On Mon, Jul 11, 2016 at 9:01 PM, Alan Thompson <[email protected]> wrote:

> In clojure we are used to shortcuts involving not:
>
> (when-not x ...)         => (when (not x) ...)
> (if-not x ...)           => (if (not x) ...)
> (not-every? pred coll)   => (not (every? pred coll))
> (not-any? pred coll)     => (not (some pred coll))
>
> However, the new function clojure.core/any? breaks this semantic pattern:
>
> ​> ​
> (doc clojure.core/any?)
> -------------------------
> clojure.core/any?
> ([x])
>   Returns true given any argument.
>
> ​> ​
> (doc clojure.core/not-any?)
> -------------------------
> clojure.core/not-any?
> ([pred coll])
>   Returns false if (pred x) is logical true for any x in coll,
>   else true.
>
> ​These two functions are not only unrelated to each other, but they don't
> even accept the same number or type of arguments.  Moreover, ​there is an
> even more surprising property:
>
> > (clojure.core/any? nil)
> true
>
> I would have bet money that, at least for nil, the result would not have
> been true.
> ​
> Given the significant prior conventions in Clojure​ for functions like
> some, every?, *-not, not-*, and also the general handling of nil, it seems
> that the new any? function is bound to cause much confusion &
> consternation, especially among people learning Clojure.
>
> Given the degenerate definition:
>
> > (source clojure.core/any?)
> (defn any?
>   [x] true)
>
>
I can't think of a single use case where this function would be useful. I
would either inline true instead of a function call, or I would supply
(constantly true) if a function is expected.

I am sure it wouldn't be included in core if there wasn't a valid reason.
Could you tell me what is this function good for?




> would it not be simpler and more instinctive to rename the function
> clojure.core/true:
>
> (defn clojure.core/true
>   [x] true)
>
> We could then have code with the obvious result:
>
> (true 1)     => true
> (true "hi")  => true
> (true [])    => true
> (true nil)   => true
>
> I believe that such a change would help to keep Clojure in line with users
> instincts and assumptions, as well as past Clojure practices.  I have often
> felt that one of the most important principles in any sort of software
> development is adherence to the Principle of Least Astonishment
> <https://en.wikipedia.org/wiki/Principle_of_least_astonishment>.
>
> Alan
>
>
>
> On Mon, Jul 11, 2016 at 7:28 AM, Alex Miller <[email protected]> wrote:
>
>>
>> 1.9.0-alpha10 includes the following changes since 1.9.0-alpha9:
>>
>> - NEW clojure.core/any? - a predicate that matches anything. any? has
>> built-in gen support. The :clojure.spec/any spec has been removed.
>> Additionally, gen support has been added for some?.
>>
>>
>>
>>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to [email protected]
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> [email protected]
> 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 [email protected].
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Kind Regards,
Atamert Ölçgen

◻◼◻
◻◻◼
◼◼◼

www.muhuk.com

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to