Mathematica中==和===之间的差异

时间:2011-03-13 01:06:23

标签: comparison wolfram-mathematica equals-operator

我认为=是作业,==是数字比较,===是符号比较(以及其他一些语言==正在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中==和===之间究竟有什么区别?我一直在查看文档,但我仍然不太了解它。

5 个答案:

答案 0 :(得分:14)

一个重要区别是===始终返回TrueFalse==可以返回未评估的值(这就是为什么它对表示方程式很有用。)

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]^21是相同的数字,因此它们在语义上是相等的。由于无法在没有更多转换的情况下确定这一点,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] Truea在最后一位二进制数字上有所不同,则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)

  

lhs === rhs如果得到则为真   表达式lhs与rhs相同,   否则收益率为假。

  

lhs == rhs如果是lhs和rhs则返回True   是完全相同的。

来自herehere的参考。

答案 4 :(得分:2)

我指导你阅读Leonid Shifrin写的一本优秀书籍section 2.5: Equality checks