2

以下のクエリでは、最初に取得X = H128していますが、それはどこから来たのですか? また、なぜ yes が返されるのですか? 変数Xが実際には定義されておらず、その条件をテストしているためですか?

?- not(X==3).
X = H128 
yes
4

3 に答える 3

6

クエリは、インスタンス化されていない変数 (X) を使用しています。X が項 3 it (X==3) でインスタンス化されているかどうかをチェックすると、X がインスタンス化されていないため失敗します。

したがって、prolog エンジンは X==3 を証明できないため、not(X==3) は成功します。したがって、プロローグ インタープリターは「yes」を返します (インタープリターの失敗アプローチとしての否定のため)、X はインスタンス化されないままです。

そのため、インタプリタは X = H128 を表示します。ここで、H128 はダミーのインスタンス化されていない変数です。

于 2011-07-12T19:31:39.840 に答える
3

当初の意図は?Xが 3 に等しくないことを述べたかったのかもしれません。不等式については、多くの Prolog システムが提供していdif/2ます。

?- dif(X,3).
dif(X,3).

このクエリでは、X3 以外の値を要求します。どの値が等しくないのでしょうか? 実際には、かなり多く: 、 、用語、 、リストなどを考え123+3cください[2,3,4]。したがって、次のような具体的な回答を与えると、X = 4他の多くの有効な回答が除外されます。ただし、ここでの答えは次のとおりです。3Xに等しくないすべてのクエリが成立します。したがって、実際の評価は後で遅延されます。

?- dif(X,3), X = 3.
false.

ここでX、値 3 を取得した状況になりましたが、これは成立しません。

?- dif(X,3), X = 4.
X = 4.

ここでは、具体的な有効な値が受け入れられ、制限dif(4,3)が解除されます。

于 2011-07-13T23:32:44.413 に答える
2

はい、それは、変数Xが最初の目標 によって拘束されていないためnot(X==3)です。実際、not/1メタ述語は、たとえ成功したとしても、バインディングを生成することはできません。の成功notは、内なる目標が失敗することを意味するからです。が空いている場合に成功する可能性がnot(X=3)あるため、失敗することに注意してください(値 3 にバインドできます)。X=3X

于 2011-07-12T19:35:30.117 に答える