Prolog 如何列出放弃一家航空公司的所有行程

Prolog 如何列出放弃一家航空公司的所有行程,prolog,Prolog,这是我的航班数据 #flight(city1, city2,airline,distance,time,price). flight(dublin, london,ab,8000,4,1000). flight(moscow,london,ab,9000,5,2000). flight(dublin,moscow,bc,1000,6,3000). flight(cork, moscow,ca,2000,7,4000). flight(chicago, dublin,ab,6000,8,4500)

这是我的航班数据

#flight(city1, city2,airline,distance,time,price).
flight(dublin, london,ab,8000,4,1000).
flight(moscow,london,ab,9000,5,2000).
flight(dublin,moscow,bc,1000,6,3000).
flight(cork, moscow,ca,2000,7,4000).
flight(chicago, dublin,ab,6000,8,4500).
flight(berlin, moscow,bc,3000,9,4600).
flight(cork, newyork,ca,4000,10,4700).
flight(paris, hongkong,bc,11000,11,4890).

connected(X,Y,_,_,_,_) :- flight(X,Y,_,_,_,_) ; flight(Y,X,_,_,_,_). 
我必须取消一家航空公司的1号城市和2号城市之间的所有行程

我对这次旅行的估计是这样的

trips(A,B,Path) :- 
      traverse(A,B,[A],Q),
      reverse(Q,Path).
 traverse(A,B,P,[B|P]) :-
         connected(A,B,_,_,_,_).
  traverse(A,B,Visited,Path) :-
         connected(A,C,_,_,_,_),
         C \== B,
         \+member(C,Visited),
         traverse(C,B,[C|Visited],Path). 
这是一次完整的旅行

Alltrip(C,L,T):-
      findall(Ci, trips(C,L,Ci), T).
我得计算一下

Alltrip\u noairline(X,Y,T,A):-
其中X和Y是城市,T是所有行程的列表,并放弃包含航空公司A航班的所有行程


我被困在这里,不知道如何开始,任何帮助都将不胜感激。谢谢我相信
已连接/6
实际上是
航班/6

您可以将筛选目标添加到您的过程中:

trips(A,B,Filter, Path) :-
  traverse(A,B,Filter, [A],Q),
  reverse(Q,Path).

traverse(A,B, Filter, P,[B|P]) :-
  flight(A,B,Airline,_,_,_),
  call(Filter, Airline).
traverse(A,B, Filter, Visited,Path) :-
  flight(A,C,Airline,_,_,_),
  C \== B,
  call(Filter, Airline),
   \+ member(C,Visited),
  traverse(C,B, Filter, [C|Visited],Path).
然后在
alltrip/3
中使用接受任何航空公司的过滤器:

alltrip(C,L,T):-
   findall(Ci, trips(C,L, any, Ci), T).

any(_).
alltrip\u noairline/4
中,禁止某些航空公司:

alltrip_noairline(C,L,T, A):-
   findall(Ci, trips(C,L, except(A), Ci), T).   

except(X, Y):- X\=Y.

您需要在trips/3中添加航空公司列表(它将变成trips/4?),然后在trips旁边的findall中添加\+成员(A,航空公司)。