以下のクエリでは、まずX = H128
を取得しています。また、なぜそれははいを返すのですか?変数X
が実際には定義されておらず、その条件をテストしているからですか?Prolog Query returned H128
?- not(X==3).
X = H128
yes
以下のクエリでは、まずX = H128
を取得しています。また、なぜそれははいを返すのですか?変数X
が実際には定義されておらず、その条件をテストしているからですか?Prolog Query returned H128
?- not(X==3).
X = H128
yes
クエリでは、インスタンス化されていない変数(X)が使用されています。 Xがインスタンス3(X == 3)でインスタンス化されているかどうかをチェックするとき、Xはインスタンス化されていないので失敗します。
したがって、プロローグエンジンがX == 3を証明できないため、(X == 3)は成功しません。 あなたのプロローグインタープリタは「はい」を返します(インタプリタの失敗アプローチとしての否定のため)、Xはインスタンス化されずに残ります。
これは、インタープリタがX = H128を示す理由です。ここで、H128は、ダミーのインスタンス化されていない変数です。
はい、変数X
が最初の目標であるnot(X==3)
にバインドされていないためです。実際には、成功したとしても、not/1
メタベースはバインディングを生成できません。 not
の成功は内部目標が失敗することを意味します。 X
が空き(かつ値3にバインドできる)場合、X=3
が成功するため、not(X=3)
が失敗することに注意してください。
元の意図は何ですか?それはあなたが不平等多くのPrologシステムは、dif/2
を提供するためにX
が3に等しいされていない状態たかったことが考えられます。
?- dif(X,3).
dif(X,3).
我々は3に等しくないX
の値だから、値を求める。このクエリで等しいではない?実際には、非常に多くの:1
、2
、用語3+3
、c
、リスト[2,3,4]
と多くを考える。したがって、X = 4
のような具体的な回答を与えると、他の多くの有効な回答が除外されます。ただし、答えはX
で、3と等しくないすべてのクエリが保持されます。したがって、実際の評価は遅れて遅れます。
?- dif(X,3), X = 3.
false.
ここでは、X
の値が3になった状態になっています。これは保持されません。
?- dif(X,3), X = 4.
X = 4.
そして、ここで具体的な有効な値が受け入れられ、そしてrestriciton dif(4,3)
が削除されます。