13

=私は代入で==あり、数値比較であり、記号比較であるという印象を受けました===(他の言語では、 ==beingequal to===beingと同様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

重要な違いの 1 つは、常にor===を返すことです。 未評価を返すことができます (これが、方程式を表すのに役立つ理由です)。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>]

于 2011-03-13T01:57:49.853 に答える
14

==lhsとrhsが等しい場合に===返されるという意味で非常に似ています。Trueそれらが異なる1つの例は、異なる表現形式の数値を比較する場合です。

In: 5.==5
Out: True

In: 5.===5
Out: False

==それらは数値的には同じですが(これがreturnsである理由です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]は特別な処理があることに注意しTrueaくださいb。より制限的なアイデンティティ テストを行うには、次を使用します。 Order[a,b]==0

a = 1. + 2^-52;
b = 1.;
a === b
Order[a, b]==0

SameQTrue式の先頭は引数を自動的にソートする可能性があるため、構文的に異なる式を返すことができます。保持属性を使用して、自動ソートを防ぐことができます。例えば

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 に答える