爲了詳細說明保羅的答案...
您已經確定了以下事實:
woman(alice). % 'alice' is a woman
woman(janice). % 'janice' is a woman
sisters(woman(X), woman(Y)). % woman(X) is a sister of woman(Y) for ANY X and Y
所以你可以看到,其原因保羅指出,關於複合詞和Prolog的不遞歸地查詢它們,你已經朝着你不想要的方向前進。在這種情況下,你已經陳述了一個事實,sisters(woman(X), woman(Y))
有兩個獨立的,沒有根據的變量。由於它們是變量,並且您沒有任何限制其值的子句,因此它們可以是任何東西。
因此,對於下面的查詢:
sisters(X, Y).
Prolog的看着你的事實和謂詞進行匹配和發現,sisters(woman(X), woman(Y))
。符合邏輯的答案,因此:
X = woman(_G2215)
Y = woman(_G2217)
這只是說,這是對的X
和Y
其中_G2215
和_G2217
是任意變量這些值如此。根據您所陳述的規則和事實,這些值都是真實的。特別是,這意味着,這是真的:
sisters(woman(david), woman(xxxxxx))
因爲X
可能是david
和Y
可能是xxxxxx
,這將是真實的,因爲你的事實說:
sisters(woman(X), woman(Y)).
你可以引入一個規則:
sisters(woman(X), woman(Y)) :- woman(X), woman(Y), X \= Y.
然後你會開始明智地回答查詢,sisters(X, Y)
:
X = woman(alice)
Y = woman(janice)
或者更簡單地說,你有:
sisters(X, Y) :- woman(X), woman(Y), X \= Y.
有了結果:
X = alice
Y = janice