我剛開始嘗試自學Prolog,在七週內同時使用七種語言和現在學習Prolog!我遇到了一些困惑。在SLSW有一天它呈現以下知識庫:Prolog順序的統一
cat(lion).
cat(tiger).
dorothy(X,Y,Z):- X = lion, Y = tiger, Z = bear.
twin_cats(X,Y):- cat(X), cat(Y).
當與twin_cats(X,Y).
問,它生產的所有的可能性兩隻貓,包括X = lion, Y = lion
和X = tiger, Y = tiger
。亂七八糟的是我試圖給twin_cats(X,Y)
規則添加一個目標,以便它只報告兩隻不同的貓。起初,我試圖
cat(lion).
cat(tiger).
dorothy(X,Y,Z):- X = lion, Y = tiger, Z = bear.
twin_cats(X,Y):- \+(X = Y), cat(X), cat(Y).
要其序言迴應no
到twin_cats(X,Y).
然而,當我剛換的目標,爲了
cat(lion).
cat(tiger).
dorothy(X,Y,Z):- X = lion, Y = tiger, Z = bear.
twin_cats(X,Y):- cat(X), cat(Y), \+(X = Y).
序言現在給我什麼,我一直在尋找,兩個答案X = lion, Y = tiger
和X = tiger, Y = lion
。
所以這是我的問題,Prolog統一變量的方式是否存在一些固有的順序?這似乎是因爲目標的順序(即使它們全部由and
分開)都會改變查詢的結果。在第二個工作KB中,我想我知道它是如何統一的。首先統一爲cat(X)
,然後cat(Y)
然後檢查它們是否相同。如果他們移動到下一個組合等,直到沒有組合,並報告通過所有三個目標的兩個案例。但是對於第一個KB,當它首先檢查是否X = Y
時,該目標是否應該是真的,因爲變量尚未統一?
Prolog統一**術語**,其中變量只是一個重要的情況 – CapelliC 2014-12-06 19:00:53
[在Prolog查詢中帶有變量的\\ \\ \\問題]的可能重複(http://stackoverflow.com/questions/5971967 /帶有變量的序列查詢問題) – celeriko 2014-12-06 19:18:06
'\ +(X = Y)'表示「'X'不能與'Y'統一。 - 變量統一是匹配的一部分,這是一種證明目標的機制,它按照從左到右的順序完成,就像它們被寫入一樣。 – 2014-12-06 21:49:32