ㄚ弟請張貼問題於此議題下,以利管理.
1、
題目:
從航班資料庫中,找出資料能回答類似每週那幾天有從倫敦直飛賈納的班機?或如何才能在週四從賈納到艾丁堡去?或我想遊覽米蘭、賈納、蘇黎士,週二從倫敦出發且在週五回倫敦,一天飛機不能超過一班行程如何安排?
程式碼:
prolog的語法有些部份我已解出來但是我跑出來會有一個錯誤一直解不出來,能否方便告訴我一下解答謝謝(有顏色畫出現部份能否幫我看一下是否正確)謝謝
:-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(???).
flyday(Day,alldays):-member(Day,[mo,tu,we,th,fr,sa,su]).
%直飛
route(P1,P2,Day,[P1-P2:Fln:DepT]):-flight(???).
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([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]).
第一個問題打flight(倫敦,賈納,D,_,_,_).
第二個問題打route(賈納,艾丁堡,th,R).
第三個問題打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.