2011-07-12 98 views
2

在下面的查詢中,首先我得到X = H128,這是從哪裏來的?此外爲什麼它返回是嗎?是否因爲變量X實際上沒有定義,我們正在測試這種情況?Prolog查詢返回H128

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

回答

6

您的查詢使用的是無關變量(X)。 當檢查X是否被實例化爲術語3 it(X == 3)時,它會失敗,因爲X沒有實例化。

因此,不是(X == 3)將成功,因爲prolog引擎不能證明X == 3。 您的序言翻譯因此返回'是'(由於否定是解釋者的失敗方法),並且X仍然沒有實例化。

這就是爲什麼解釋器顯示X = H128,其中H128是一個虛假的未被證實的變量。

2

是的,這是因爲變量X不受第一個目標not(X==3)的約束。實際上not/1 metapredicate永遠不會產生綁定,即使它成功。那是因爲not的成功意味着內心的失敗。請注意0​​將失敗,因爲X=3可以成功,當X是空閒的(並且可以綁定到值3)。

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)被刪除。