[英]Why `X=1,X=1.` prints `X=1` instead of `true`
我正在學習 Prolog 的基礎知識,我想知道為什么以下行打印X = 1
而不是true
?
?- X=1,1=X.
X = 1.
——
我的命令中的第一個X=1
是賦值,第二個是檢查相等性。
您的查詢中沒有賦值或相等性測試,只有術語的統一。 查詢通過將變量X
與1
統一而成功,這就是頂級報告的內容:它告訴哪些變量綁定使查詢為真。
在合取中的第一個目標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.