web-dev-qa-db-ja.com

等しくなく、Prologで統一されていない

PrologのA\= Bとnot(A == B)の違いは何ですか?

私はこれを見つけました http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse5 そしてこのwikiページ http://en.wikibooks.org/wiki/Prolog/Built-in_predicates しかし、違いの明確化も、\ =の短い意味もないので、それは私を助けませんでした。

ありがとう。

12
Vitali Pom

_A \= B_はnot (A = B)と同等です

それでは、最初に_=/2_と_==/2_を比較してみましょう。 swi-prologマニュアルから:

?Term1 =?Term2
Term1とTerm2を統合します。統合が成功した場合はTrue

@ Term1 == @ Term2
Term1がTerm2と同等の場合はTrue。

_=/2_が用語を統一しようとし、成功した場合、_==/2_がチェックを実行している間はtrueであることに注意してください。

_?- X = 1.
X = 1.
(implicit true.)
_

一方

_?- X == 1.
false.
_

そしてまた:

_?- X = Y.
X = Y.

?- X == Y.
false.
_

現在、_not/1_は結果を反転し、_=/2_または_==/2_がfalseの場合はtrueになります。
for _==/2_複雑なことは何もありません。用語が同等である場合はfalseを返し、そうでない場合はtrueを返します。
_=/2_の場合、すべての統合は一時的なものになることを覚えておく必要があります。

_?- \+ (\+ X = 1), print(X).
_G399
true.
_

(__G399_は、Xがインスタンス化されていないことを示します)

17