簡體   English   中英

為什么 `X=1,X=1.` 打印 `X=1` 而不是 `true`

[英]Why `X=1,X=1.` prints `X=1` instead of `true`

我正在學習 Prolog 的基礎知識,我想知道為什么以下行打印X = 1而不是true

?- X=1,1=X.
X = 1.

——

我的命令中的第一個X=1是賦值,第二個是檢查相等性。

您的查詢中沒有賦值或相等性測試,只有術語的統一 查詢通過將變量X1統一而成功,這就是頂級報告的內容:它告訴哪些變量綁定使查詢為真。

在合取中的第一個目標X = 1成功之后,第二個目標是統一1 = 1 ,這很容易成功。

PS 另請注意,Prolog 系統在報告成功查詢的方式上有所不同。 有些打印true ,其他打印yes (報告成功查詢的傳統方式)。

當答案為並且值綁定到頂層變量時,將顯示變量的值,這意味着結果為真。

這里有些例子。

test_01 :-
    X = 1,
    X = 1.

test_02 :-
    X = 1,
    X = 2.

test_03(X) :-
    X = 1,
    X = 1.

test_04(X) :-
    X = 1,
    X = 2.

當示例使用 SWI-Prolog 從頂層運行時

?- test_01.
true.

?- test_02.
false.

?- test_03(X).
X = 1.

?- test_04(X).
false.

以下是一些僅在頂層完成的示例

?- X=1.
X = 1.

?- 1=1.
true.

?- 1=0.
false.

?- 1==0.
false.

我的命令中的第一個 X=1 是賦值,第二個是檢查相等性。

X=1不是賦值,它是整數 1 到變量X的統一。 第二個X=1不是檢查相等性,它是X到 1 的另一個統一,但由於此時X綁定到 1,它確實是一個不同的統一。

要在 Prolog 中進行相等檢查,請使用== ,例如

?- 1 == 1.
true.

?- 1 == 2.
false.

此外,是邏輯和,所以如果

?- X = 1.
X = 1.

那么 1 綁定到X並且對於您問題中的第二行來說是真實相似的。


然而,代碼也必須被視為

?- true,true.
true.

?- true,false.
false.

同時; 是合乎邏輯的或

?- true;true.
true ;
true.

?- true;false.
true ;
false.

?- true;false;true.
true ;
true.

?- false;true.
true.

?-  false;false.
false.

請注意,前 3 個答案有 2 個結果,但后兩個答案有 1 個結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM