:-op(50,xfy,:).
flight(P1,P2,Day,Fln,DepT,ArrT):-timetable(P1,P2,FlL),member(DepT/ArrT/Fln/DayL,FlL),flyday(Day,DayL).
flyday(Day,DayL):-member(Day,DayL).
flyday(Day,alldays):-member(Day,[mo,tu,we,th,fr,sa,su]).
route(P1,P2,Day,[P1-P2:Fln:DepT]):-flight(P1,P2,Day,Fln,DepT,_).
route(P1,P2,Day,[P1-P3:Fln1:DepT1|R]):-
route(P3,P2,Day,R),flight(P1,P3,Day,Fln1,DepT1,ArrT1),deptime(R,DepT2),transfer(ArrT1,DepT2).
deptime([P1-P2:Fln:DepT|_],DepT).
transfer(H1:M1,H2:M2):-60*(H2-H1)+M2-M1>=40.
%航班資料庫
timetable(艾丁堡,倫敦,[9:40/10:50/ba4733/alldays,13:40/14:50/ba4773/alldays,19:40/20:50/ba4833/[mo,tu,we,th,fr,su]]).
timetable(倫敦,艾丁堡,[9:40/10:50/ba4732/alldays,11:40/12:50/ba4752/alldays,18:40/19:50/ba4822/[mo,tu,we,th,fr]]).
timetable(倫敦,賈納,[13:20/16:20/ju201/[fr],13:20/16:20/ju213/[su]]).
timetable(倫敦,蘇黎士,[9:10/11:45/ba614/alldays,14:45/17:20/sr805/alldays]).
timetable(倫敦,米蘭,[8:30/11:20/ba510/alldays,11:00/13:50/az459/alldays]).
timetable(賈納,蘇黎士,[11:30/12:40/ju322/[tu,th]]).
timetable(賈納,倫敦,[11:10/12:20/ju200/[fr],11:25/12:20/ju212/[su]]).
timetable(米蘭,倫敦,[9:10/10:00/az458/alldays,12:20/13:10/ba511/alldays]).
timetable(米蘭,蘇黎士,[9:25/10:15/sr621/alldays,12:45/13:35/sr623/alldays]).
timetable(蘇黎士,賈納,[13:30/14:40/ju323/[tu,th]]).
timetable(蘇黎士,倫敦,[9:00/9:40/ba613/[mo,tu,we,th,fr,sa],16:10/16:55/sr806/[mo,tu,we,th,fr,su]]).
timetable(蘇黎士,米蘭,[7:55/8:45/sr620/alldays]).
1.每週那幾天有從倫敦直飛賈納的班機?
?-flight(倫敦,賈納,D,_,_,_).
D = fr
2.如何才能在週四從賈納到艾丁堡去?
?-route(賈納,艾丁堡,th,R).
R = ['賈納'-'蘇黎士':ju322:11:30, '蘇黎士'-'倫敦':sr806:16:10, '倫敦'-'艾丁堡':ba4822:18:40]
3.遊覽米蘭、賈納、蘇黎士,週二從倫敦出發且在週五回倫敦,一天飛機不能超過一班行程如何安排?
?-flight(倫敦,C1,tu,Fn1,Dp1,Ar1),flight(C1,C2,we,Fn2,Dp2,Ar2),flight(C2,C3,th,Fn3,Dp3,Ar3),flight(C3,倫敦,fr,Fn4,Dp4,Ar4),member(C1,[米蘭,賈納,蘇黎士]),member(C2,[米蘭,賈納,蘇黎士]),member(C3,[米蘭,賈納,蘇黎士]),C1\==C2,C2\==C3,C1\==C3.
C1 = '米蘭'
Fn1 = ba510
Dp1 = 8:30
Ar1 = 11:20
C2 = '蘇黎士'
Fn2 = sr621
Dp2 = 9:25
Ar2 = 10:15
C3 = '賈納'
Fn3 = ju323
Dp3 = 13:30
Ar3 = 14:40
Fn4 = ju200
Dp4 = 11:10
Ar4 = 12:20
_________________________
天步占星