MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: confused about == vs === in this equality

  • To: mathgroup at smc.vnet.net
  • Subject: [mg103854] Re: [mg103825] Re: confused about == vs === in this equality
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Fri, 9 Oct 2009 07:17:20 -0400 (EDT)
  • References: <20091003104738.LCJ3I.416659.imail@eastrmwml34> <200910040935.FAA07794@smc.vnet.net> <hacmoa$sko$1@smc.vnet.net> <200910081150.HAA13555@smc.vnet.net>

Hi Drago,

I have to say I am not convinced about Null (I have not thought about  
missing). My reason is simply this: in the case of Intermediate it is  
easy to construct two completely unrelated expressions which will  
evalute to Intermediate. Having Intermediate==Intermediate evaluate to  
True would lead to equality between these expressions also evaluating  
to True. Conceivably this could be "hidden" within some complicated  
computation and result in a totally misleading final result.

On the other hand I don't know of anything but Null that *evaluates"  
to Null. If you can produce two obviously unrelated expressions both  
of which evaluate to Null then indeed I will agree with you. As it is  
I think the current situation is just fine.

Andrzej


On 8 Oct 2009, at 20:50, Drago Ganic wrote:

> Hi Andrzej,
> there is one function (Missing) and one symbol (Null) which >>should<<
> behave the same as Indetereminate and ComplexInfinity but  
> unfortunatly does
> not.
>
> In[1]:= Null == Null
> Out[1]= True
>
> In[2]:= Missing[] == Missing[]
> Out[2]= True
>
> Null is Mathematica legacy which has basically the same meaning as  
> Missing[]
> (or maybe Missing["Nonexistent"]). Missing incorporates  
> Indetereminate via
> Missing["Indeterminate"].
> All of those (Indetereminate & ComplexInfinity for numeric data and
> Null/Missing for any kind of data), are so called "null values" in  
> database
> systems and for them the Equal and other logical connectivities  
> (And, Or,
> Not, etc.) are overloaded. Unfortunatly this is not the case in  
> Mathematica.
>
> Greetings from Croatia,
> Drago Ganic
>
> "Andrzej Kozlowski" <akoz at mimuw.edu.pl> wrote in message
> news:hacmoa$sko$1 at smc.vnet.net...
>> I amy be taking a bit of a risk here, but I would guess that
>> ComplexInfinity and Indeterminate are the only symbols in Mathematica
>> with this property, that is we get:
>>
>> a=ComplexInfinity
>>
>> TrueQ[Unevaluated[x == x] /. x -> a]
>>
>> False
>>
>> a = Indeterminate;
>>
>> TrueQ[Unevaluated[x == x] /. x -> a]
>>
>> False
>>
>> I believe that there are no other symbols for which this happens (?)
>> (If I am right and it is the only one that there is no need to be
>> seriously concerned or, as you say, "careful" about this issue.)
>>
>> Why does and Indeterminate and ComplexInfinity behave in this way? Of
>> course this is a matter of design and not (for example) mathematics  
>> so
>> the question really is, is this a reasonable and useful thing rather
>> than if it is right. I guess it is pretty clear that since
>> Indeterminate refers to a magnitude that cannot be determined, you
>> would not really want to assert that two expressions, both of which
>> evaluate to Indeterminate, are in any sense equal. For example it
>> would seem very strange if
>>
>> Infinity - Infinity == Infinity/Infinity
>>
>> returned True (as would have to be the case if
>> Indeterminate==Indeterminate returned True). Similar considerations
>> perhaps apply to ComplexInfinity, which refers to a complex quantity
>> with infinite magnitude but with an indeterminate argument. (However,
>> I am less convinced of that in the case of ComplexInfinty than in the
>> case of Indeterminate, because ComplexInfinity has a natural
>> interpretation as a unique point on the Riemann sphere).
>>
>> (Of course === asks quite a different question and there is no doubt
>> that when you have identical expressions on both sides of === the
>> answer should always be True.)
>>
>> Andrzej Kozlowski
>>
>>
>>
>>
>>
>>
>> On 4 Oct 2009, at 18:35, Nasser Abbasi wrote:
>>
>>> ?===
>>> lhs===rhs yields True if the expression lhs is identical to rhs, and
>>> yields
>>> False otherwise.
>>>
>>> ?==
>>> lhs==rhs returns True if lhs and rhs are identical.
>>>
>>> But looking at this example:
>>>
>>> a = ComplexInfinity;
>>> If[a == ComplexInfinity, Print["YES"]]
>>>
>>> Expecting it would print "YES", but it does not. it just returns the
>>> whole
>>> thing unevaluated? But
>>>
>>> If[a === ComplexInfinity, Print["YES"]]
>>>
>>> does return YES.
>>>
>>> I guess I am a little confused about the "expression" bit in the
>>> definition.
>>>
>>> So, when using the 3"=", it is looking at the _value_ of the
>>> expression, but
>>> when using the 2"=", it is looking at the expression _as it is_,  
>>> i.e.
>>> without evaluating it?  Is this the difference?  I've always used
>>> the 2"="
>>> for equality, now I have to be more careful which to use.
>>>
>>> --Nasser
>>>
>>>
>>> __________ Information from ESET NOD32 Antivirus, version of virus
>>> signature database 4478 (20091003) __________
>>>
>>> The message was checked by ESET NOD32 Antivirus.
>>>
>>> http://www.eset.com
>>>
>>>
>>>
>>>
>>
>>
>
>



  • Prev by Date: Re: Re: How to find which variable caused the trigger in Manipulate[]
  • Next by Date: Re: Re: confused about == vs === in this equality
  • Previous by thread: Re: confused about == vs === in this equality
  • Next by thread: Re: Re: confused about == vs === in this equality