2017-02-28 57 views
0

如果我有以下規則:它爲什麼不停下來?

test(X, Y, abc) :- X=='true' ; Y =='true'. 

和我進行查詢,如:test(true, true, X).

爲什麼會輸出X = abc ?兩次?

| ?- test(true, true, X). 
X = abc ? n 
X = abc ? n 
no 

不應該只回答一次嗎?

不應該發現X == true,然後停止,因爲如果只有一個條件爲真,那麼整個條件是真的?

+2

'test(true,true,abc)'成功兩次,因爲你的規則說如果'X == true'或'Y == true'就是true。所以它以兩種不同的方式成功。 Prolog將向您展示所有解決方案。 – lurker

+2

...並且你總是可以寫'true'來代替'true' – false

回答

1

發生這種情況是因爲Prolog會嘗試找到所有可能的解決方案,並將遵循所有可能的解決方案。你給出了兩條可能的道路以達到真實性,所以它會跟隨它們並向你展示兩個結果。