如果我有关于航班的事实清单,我该如何编写预测以逐一将所有路线从一个城市返回到列表城市?例如,从rome
到[moscow, amsterdam]
的所有路由。
flight(london,dublin).
flight(rome,london).
flight(rome,paris).
flight(paris,dublin).
flight(berlin,moscow).
flight(paris,amsterdam).
flight(berlin,dublin).
flight(london,newyork).
flight(dublin,newyork).
flight(dublin,cork).
flight(dublin,rome).
flight(dublin,chicago).
flight(amsterdam,hongkong).
flight(london,hongkong).
flight(dublin,amsterdam).
答案 0 :(得分:0)
如果有直飞航班,则存在路径:
route(X,Y,L):-
route(X,Y,L,[X]).
route(X,Y,L,K):-
flight(X,Y),
reverse([Y|K],L).
如果存在某些Z
,Z
已连接X
且Z
与Y
相关联。
route(X,Y,L,E):-
flight(X,Z),
\+ member(Z,E),
route(Z,Y,L,[Z|E]).
如果要在一个列表中找到所有路径,请使用prolog预定义谓词中的findall/3
。