在下面的查詢中,首先我得到X = H128
,這是從哪裏來的?此外爲什麼它返回是嗎?是否因爲變量X
實際上沒有定義,我們正在測試這種情況?Prolog查詢返回H128
?- not(X==3).
X = H128
yes
在下面的查詢中,首先我得到X = H128
,這是從哪裏來的?此外爲什麼它返回是嗎?是否因爲變量X
實際上沒有定義,我們正在測試這種情況?Prolog查詢返回H128
?- not(X==3).
X = H128
yes
您的查詢使用的是無關變量(X)。 當檢查X是否被實例化爲術語3 it(X == 3)時,它會失敗,因爲X沒有實例化。
因此,不是(X == 3)將成功,因爲prolog引擎不能證明X == 3。 您的序言翻譯因此返回'是'(由於否定是解釋者的失敗方法),並且X仍然沒有實例化。
這就是爲什麼解釋器顯示X = H128,其中H128是一個虛假的未被證實的變量。
是的,這是因爲變量X
不受第一個目標not(X==3)
的約束。實際上not/1
metapredicate永遠不會產生綁定,即使它成功。那是因爲not
的成功意味着內心的失敗。請注意0將失敗,因爲X=3
可以成功,當X
是空閒的(並且可以綁定到值3)。
你的初衷是什麼?這可能是因爲你想聲明X
不等於3.對於不平等大部分Prolog系統提供dif/2
:
?- dif(X,3).
dif(X,3).
在此查詢中,我們要求值X
這不等於3,那麼,哪值不平等?實際上,相當多:想到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)
被刪除。