13

我的印象=是赋值,==是数字比较,并且===是符号比较(以及在其他一些语言==中的存在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 中 == 和 === 之间究竟有什么区别呢?我一直在看文档,但我仍然不太明白。

4

5 回答 5

16

一个重要的区别是===总是返回Trueor 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>].

于 2011-03-13T01:57:49.853 回答
14

==并且在 lhs 和 rhs 相等===时返回的意义上非常相似。True它们不同的一个例子是当您比较不同表示格式的数字时。

In: 5.==5
Out: True

In: 5.===5
Out: False

尽管它们在数字上是相同的(这就是为什么==返回True),但它们并不完全相同。

仅供参考,它们在内部是不同的功能。==Equal===而是SameQ

于 2011-03-13T01:13:44.220 回答
14

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]可以返回Trueifab最后一个二进制数字不同。要进行更严格的身份测试,请使用 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
于 2011-03-13T10:02:12.823 回答
7

如果表达式 lhs 与 rhs 相同,则 lhs===rhs 产生 True,否则产生 False。

如果 lhs 和 rhs 相同,则 lhs==rhs 返回 True。

这里这里参考。

于 2011-03-13T01:11:11.777 回答
2

我将您引导至第 2.5 节: Leonid Shifrin 的一本优秀书籍的平等检查。

于 2011-03-13T03:24:20.747 回答