2010-12-14 111 views
0
% link(Origin,Destination,Speed,Length). 
link(paris,milano,140,360). 
link(paris,london,200,698). 
link(berlin,atena,110,714). 
link(atena,paris,90,370). 

我需要讓我得到一個Path從X市城市Y.幫助尋找路徑

route(Origin,Destination,TrainType,Path,Length,Duration). 

我是新來的Prolog寫這條路線謂語,所以我寫了這樣的事情。我知道這是不正確的:

route(Origin,Destination,TrainType,Path,Legth,Duration) :- 
    link(Origin,City,Len), 
    City \= Origin, 
    NewLen is Length + Len, 
    route(City,Destination,TrainType,Path,NewLen,Duration). 

回答

2

你的斷言缺乏基本情況,告訴它何時停止。現在,謂詞總是會自動調用,直到它失敗(或者更糟糕的是,無限循環,取決於你的謂詞)。下面給你一個反向路徑:

route(Goal, Goal, Path, Path). % base case 
route(From, To, Path0, Path) :- 
    direct_link(From, Via), 
    route(Via, To, [From|Path0], Path). 

其中直接鏈接意味着你可以從A到B;我假設鐵路是雙向的:

direct_link(A,B) :- link(A, B, _Speed, _Length). 
direct_link(B,A) :- link(B, A, _Speed, _Length). 

您需要調用reverse的道路上,並添加參數跟蹤長度和持續時間。我將把它作爲一個練習。