以下是一个在线教程提供的路线规划程序:-
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
没有理由的情况下才需要这样的声明?
发布于 2014-04-07 19:32:52
Z \= Y行防止路由中的循环,否则您可能会有一个段,即arad -> arad。
https://stackoverflow.com/questions/22386947
复制相似问题