Prolog中的路径规划

Prolog中的路径规划,prolog,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(

以下是在线教程提供的路线规划程序:-

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
未接地时才需要该语句?

Z\=Y线阻止了路线中的环路,否则可能会有一个分段为arad->arad

运行带和不带代码的代码,看看会发生什么。:)我找不到任何区别…你能给我一些提示吗?