I added some text to the macro "if" on ClojureDocs.org last time this issue was discussed on the email list. It is a bit wordy, but does also mention that this is something the Java docs themselves warn about.
http://clojuredocs.org/clojure_core/clojure.core/if Andy On Dec 11, 2012, at 5:38 AM, Jim foo.bar wrote: > Apologies...I did not realise this had already been answered... oops! :-) > > > On 11/12/12 13:32, Jim foo.bar wrote: >> If you're looking for some truly unintuitive equality behavior check this >> out: >> >> user=> (def pred (Boolean. false)) ;;not a primitive but an object >> #'user/pred >> user=> (= pred false) >> true >> user=> (when pred (println "I really shouldn't print")) >> I really shouldn't print >> nil >> >> >> Jim >> >> >> On 11/12/12 13:19, Jim foo.bar wrote: >>> From the docs: >>> >>>> Equality. Returns true if x equals y, false if not. Same as >>>> Java x.equals(y) except it also works for nil, and compares >>>> numbers and collections in a type-independent manner. Clojure's immutable >>>> data >>>> structures define equals() (and thus =) as a value, not an identity, >>>> comparison. >>> >>> hope that helps... >>> >>> Jim >>> >>> >>> >>> On 11/12/12 13:17, Jim foo.bar wrote: >>>> I disagree... >>>> One of the nice things about clojrue is that, at tis hear, lies the >>>> 'equiv' operator which is basically the 'egal' fn as defined by Baker >>>> [1993] [Equal rights for functional objects or the mroe things change the >>>> more they stay the same]. When using '=' with data-structures you are >>>> essentially comparing values and not types. >>>> >>>> To come back to your example, both are sequential seqs that contain the >>>> same values in the same order. Why shouldn't they be equal? Clojure would >>>> not be the language we all love, if they weren't equal... >>>> >>>> Jim >>>> >>>> >>>> On 03/10/12 06:24, Larry Travis wrote: >>>>> What is the rationale for this? >>>>> >>>>> user> (= [1 2 3 4] '(1 2 3 4)) >>>>> true >>>>> >>>>> I was quite surprised when this turned out to be the cause of a bug in a >>>>> function I am constructing. Vectors and lists differ so substantially in >>>>> their implementation and in their behavior that a vector and a list >>>>> should not be considered "equal" just because they contain the same >>>>> elements in the same order. >>>>> >>>>> --Larry >>>>> >>>>> >>>> >>> >> > > > -- > 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 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