Services & Resources / Wolfram Forums / MathGroup Archive
-----

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: [mg103855] Re: [mg103825] Re: confused about == vs === in this equality
  • From: DrMajorBob <btreat1 at austin.rr.com>
  • Date: Fri, 9 Oct 2009 07:17:31 -0400 (EDT)
  • References: <20091003104738.LCJ3I.416659.imail@eastrmwml34>
  • Reply-to: drmajorbob at yahoo.com

I always found it annoying that Null isn't treated as a value, in database  
tests for equality.

So I'm glad Mathematica didn't go that way.

Bobby

On Thu, 08 Oct 2009 06:50:29 -0500, Drago Ganic <dganic at vodatel.net> 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
>>>
>>>
>>>
>>>
>>
>>
>
>


-- 
DrMajorBob at yahoo.com


  • Prev by Date: Re: Re: confused about == vs === in this equality
  • 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: on passing arguments to a function, how to break a