我需要一個謂詞路由,它可以爲所有城市提供從開始&結束的所有城市。例如:查找所有可能的路徑而不用重訪
path(chicago,atlanta).
path(chicago,milwaukee).
path(milwaukee,detroit).
path(milwaukee,newyork).
path(chicago,detroit).
path(detroit, newyork).
path(newyork, boston).
path(atlanta,boston).
path(atlanta, milwaukee).
?- routing(chicago,newyork,X).
X=[chicago,milwaukee,newyork];
X=[chicago,detroit,newyork];
X=[chicago,milwaukee,detroit,newyork];
X=[chicago,atlanta,milwaukee,newyork];
X=[chicago,atlanta,milwaukee,detroit,newyork]
我試過這個,並不斷回來。
routing(FromCity,ToCity,[FromCity|ToCity]) :-
path(FromCity,ToCity).
routing(FromCity,ToCity,[FromCity|Connections]) :-
path(FromCity,FromConnection),
path(FromConnection,ToConnection),
path(ToConnection,ToCity),
routing(ToConnection,ToCity,Connections).
routing(FromCity,ToCity,[]).
,但它只是不斷給
X=[chicago,milwaukee,newyork];
X=[chicago,chicago,newyork];
X=[chicago,chicago,chicago,newyork]
...
..
可有一個人請點我在正確的方向...
您好,我有一個類似的問題,但我想用「寫」函數寫出來裏面的路徑所以我將不得不在函數中調用是開始和結束有沒有什麼辦法來配置您的示例以使其工作? – Fjodor
@Fjodor:由於回溯,你無法可靠地寫出路徑。嘗試在遞歸調用後寫入(連接) – CapelliC