我认为=
是作业,==
是数字比较,===
是符号比较(以及其他一些语言==
正在equal to
和===
正在identical to
。但是,看看以下内容似乎并非如此......
In: x == x
Out: True
In: x === x
Out: True
In: 5 == 5
Out: True
In: 5 === 5
Out: True
In: x = 5
Out: 5
In: 5 == x
Out: True
In: 5 === x
Out: True
In: 5 5 == 5x
Out: True
In: 5 5 === 5x
Out: True
In: x == y
Out: x == y
In: x === y
Out: False
In: y = x
Out: 5
In: x == y
Out: True
In: x === y
Out: True
那么Mathematica中==和===之间究竟有什么区别?我一直在查看文档,但我仍然不太了解它。
答案 0 :(得分:14)
一个重要区别是===
始终返回True
或False
。 ==
可以返回未评估的值(这就是为什么它对表示方程式很有用。)
In[7]:= y == x^2 + 1
Out[7]= y == 1 + x^2
In[8]:= y === x^2 + 1
Out[8]= False
有一些有趣的案例,==
返回未评估,值得在编程时注意到。例如:
In[10]:= {} == 1
Out[10]= {} == 1
会影响If[foo=={}, <true>, <false>]
等内容。
答案 1 :(得分:13)
==
和===
非常相似,如果lhs和rhs相等则返回True
。它们不同的一个例子是比较不同表示格式的数字。
In: 5.==5
Out: True
In: 5.===5
Out: False
虽然它们在数字上是相同的(这就是==
返回True
的原因),但它们并不完全相同。
仅供参考,它们在内部具有不同的功能。 ==
为Equal
,而===
为SameQ
。
答案 2 :(得分:13)
Equal
表示语义相等,而SameQ
表示句法相等。例如,Sin[x]^2+Cos[x]^2
和1
是相同的数字,因此它们在语义上是相等的。由于无法在没有更多转换的情况下确定这一点,Equal
将返回未评估的值。但是,实际表达式不同,因此SameQ
会给出False
。
Sin[x]^2 + Cos[x]^2 == 1
Sin[x]^2 + Cos[x]^2 === 1
Simplify[Sin[x]^2 + Cos[x]^2 == 1]
请注意,对Real
号码进行特殊处理,如果SameQ[a,b]
True
和a
在最后一位二进制数字上有所不同,则b
可以返回Order[a,b]==0
。要进行更严格的身份测试,请使用a = 1. + 2^-52;
b = 1.;
a === b
Order[a, b]==0
SameQ
对于语法不同的表达式, True
可以返回c + d === d + c
SetAttributes[SameQ, HoldAll]
c + d === d + c
,因为表达式头可以自动对参数进行排序。您可以使用保留属性来阻止自动排序。例如
{{1}}
答案 3 :(得分:7)
答案 4 :(得分:2)
我指导你阅读Leonid Shifrin写的一本优秀书籍section 2.5: Equality checks 。