的路上我給定弧線的列表:如果有從路徑遍歷(隨可能存在的環路),並返回在序言
arc(a,b).
arc(b,c).
arc(c,d).
arc(d,b).
arc(d,e).
arc(e,e).
arc(e,f).
我已經寫了一組子句,這將告訴我的節點X
到節點Y
。循環可能會發生,我已經說明了這一點。
path(X,Y) :-
arc(X,Y).
path(X,Y) :-
arc(X,Z),
path(Z,Y,[X]).
path(X,Y,P) :-
arc(X,Y).
path(X,Y,P) :-
\+ member(X,P),
arc(X,Z),
append([X],P,L),
path(Z,Y,L).
我需要修改它,在成功時返回遍歷的節點列表。我不清楚我會如何做到這一點。
我假設我的基本情況是類似於path2(X,Y,[X,Y]) :- arc(X,Y).
,但這不適用於我的程序。前一部分的解決方案有什麼問題嗎?或者我錯過了一些小修改?任何幫助,將不勝感激。謝謝!
你想用「路徑(X,Y,P): - 弧(X,Y)」來實現什麼? (確保頭部中的所有變量也存在於身體內是一個好主意。) – Kaarel 2010-10-10 19:51:07
這是基本情況。一旦我們從當前節點(X)到最終節點(Y)出現一條弧線,我們就找到了一條路徑。 P是我們已經訪問的節點的列表。我明白你在說什麼,並同意P在那個條款中沒有真正的用處(或者是否)?但是我只是不知道該從哪裏去。 – birderic 2010-10-10 20:04:38
另一件事:append([X],P,L)== L = [X | P] – Kaarel 2010-10-10 20:13:45