The command
SameQ[1, Null]
returns
False
which is what I would expect, but the command
Equal[1, Null]
returns
1==Null
Why is Mathematica agnostic as to whether 1 is equal to Null ? Surely it is not ?
Answer
=== (SameQ) tests structural equality and is meant mainly for programming uses. Like nearly all functions named as ...Q, it evaluates immediately to either True or False.
== both represents and tests mathematical equality, and is meant for symbolic algebra use.
Thus when == is used with a symbol (or expression containing symbols) on either side, it will not evaluate. It stays unevaluated and it can be used to represent a mathematical statement. This is how we write equations in Mathematica, e.g. x^2 - 2 == 0.
Null has no meaning in symbolic algebra uses so here it is just treated as a symbol, which it is. Thus 1 == Null stays unevaluated the same way 1 == x does.
Mathematica is loosely typed: everything is an expression. You may put just about anything on either side of ==. The nature of the language does not make it practical or worthwhile for functions to try to give a special treatment for each kind of object. Since Null has no special meaning or use in symbolic algebra, it receives no special treatment from Equal.
Also consider that Mathematica will take things like Solve[Null^2 == 2, Null] with no complaint.
Comments
Post a Comment