2014-03-13 77 views
2

下面是一个在线教程,给出路线规划方案: -路线规划中的Prolog

route(X,Y,R) :- 
route(X,Y,[X],R). 

route(X,Y,_,[drive(X,Y)]) :- 
travel(X,Y). 
route(X,Y,V,[drive(X,Z)|R]) :- 
travel(X,Z), 
\+ member(Z,V), 
route(Z,Y,[Z|V],R) 
Z \= Y.  %Only required if Y is not ground. 


travel(X,Y) :- road(X,Y). 
travel(X,Y) :- road(Y,X). 


road(arad,sibiu). 
road(arad,timisoara). 
road(arad,zerind). 
road(zerind,oradea). 
road(oradea,sibiu). 
road(sibiu,fagaras). 

什么我不明白的是注释语句:Z\=Y。 为什么需要此声明?以及为什么只有在Y不被磨光时才需要该声明?

+1

带着或不带着它运行代码,看看会发生什么。 :) –

+1

我找不到任何区别...你能提供一些提示吗? – Pingu

回答

1

Z \ = Y线防止路线中的环路,否则您可能会有一个路段 - > arad。