Re: Re: confused about == vs === in this equality
- To: mathgroup at smc.vnet.net
- Subject: [mg103859] Re: [mg103825] Re: confused about == vs === in this equality
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Fri, 9 Oct 2009 07:18:17 -0400 (EDT)
- References: <20091003104738.LCJ3I.416659.imail@eastrmwml34> <200910040935.FAA07794@smc.vnet.net> <hacmoa$sko$1@smc.vnet.net> <200910081150.HAA13555@smc.vnet.net> <4189AD13-818D-4022-B5BC-5F9E92D64AC9@mimuw.edu.pl>
In my post below I wrote "missing" instead of "Missing" and "Intermedite" instead of "Indeterminante" (3 times!) How much more mindless can one get? Andrzej On 9 Oct 2009, at 11:14, Andrzej Kozlowski wrote: > 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 >>>> >>>> >>>> >>>> >>> >>> >> >> >
- References:
- confused about == vs === in this equality
- From: "Nasser Abbasi" <nma@12000.org>
- Re: confused about == vs === in this equality
- From: "Drago Ganic" <dganic@vodatel.net>
- confused about == vs === in this equality