2010-12-14 134 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的道路上,并添加参数跟踪长度和持续时间。我将把它作为一个练习。