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

Reply via email to