knp*_*wrs 11 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
Run Code Online (Sandbox Code Playgroud)
那么Mathematica中==和===之间究竟有什么区别呢?我一直在看文档,但我仍然不太明白.
Bre*_*ion 14
一个重要的区别是===总是返回True或False. ==可以返回未评估的(这就是为什么它对表示方程式很有用.)
In[7]:= y == x^2 + 1
Out[7]= y == 1 + x^2
In[8]:= y === x^2 + 1
Out[8]= False
Run Code Online (Sandbox Code Playgroud)
有一些有趣的案例==表明,在编程时,未评估的回报值得注意.例如:
In[10]:= {} == 1
Out[10]= {} == 1
Run Code Online (Sandbox Code Playgroud)
这可能会影响像If[foo=={}, <true>, <false>].
abc*_*bcd 13
==并且在lhs和rhs相等的情况下===返回非常相似True.它们不同的一个例子是比较不同表示格式的数字.
In: 5.==5
Out: True
In: 5.===5
Out: False
Run Code Online (Sandbox Code Playgroud)
虽然它们在数字上是相同的(这就是为什么==返回True),但它们并不完全相同.
仅供参考,它们在内部具有不同的功能.==是Equal的,而===为SameQ.
Yar*_*tov 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]
Run Code Online (Sandbox Code Playgroud)
需要注意的是有特殊处理的Real数字,SameQ[a,b]可以返回True,如果a和b过去二进制数字不同.要进行更严格的身份测试,请使用 Order[a,b]==0
a = 1. + 2^-52;
b = 1.;
a === b
Order[a, b]==0
Run Code Online (Sandbox Code Playgroud)
SameQ可以返回True语法不同的表达式,因为表达式头可以自动对参数进行排序.您可以使用保留属性来阻止自动排序.例如
c + d === d + c
SetAttributes[SameQ, HoldAll]
c + d === d + c
Run Code Online (Sandbox Code Playgroud)