我有在序言下列問題麻煩的行程路徑列表,我有一個知識基礎的幾個事實,例如:麻煩在序言
flight(rome,london,ba,1500,150,400).
flight(london,newyork,airfrance,600,60,200).
flight(rome,paris,airfrance,1200,120,500).
flight(paris,newyork,airfrance,600,60,200).
flight(newyork,london,ba,1500,240,300).
我只是在獲得的列表感興趣從X到Y的所有可能的路線。我知道我必須使用遞歸規則,並且必須將訪問的地點添加到列表中,以防止週期反覆運行,因爲知識庫中的飛行路徑有幾個週期。
我至今是:
flight_route(X,Y):-
flight(X,Y,A,B,C,D).
trip(X,X,[]).
trip(X,Z,T) :-
flight_route(Y,Z),
not(member(Y,T)),
trip(X,Y,[Y|T]).
出於某種原因,當我在看的痕跡,當它試圖檢查不是(會員(Y,T)),但我的規則失敗不能理解爲什麼會這樣。
謝謝您的回覆,我可以看到你的建議如何有道理,但一我不確定的是如何編寫列表T.在做出更改後,我建議我可以查詢例如(羅馬,紐約)。它返回True。但我不確定如何返回並寫入控制檯列表T的所有可能性。當我查詢(羅馬,紐約,T)。我得到一個錯誤的結果。再次感謝您的建議。 – user2928132 2014-11-02 16:20:14
提示:您可以使用**附加**參數返回兩個連接機場之間的路徑。 (當前)列表參數只是爲了避免週期。 – 2014-11-02 16:28:27
謝謝你的回答Paulo。我想我現在明白了。 – user2928132 2014-11-11 23:07:33