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.
