Planificarea călătoriilor

Enunțul problemei:
Avem o bază de date care reține zborurile de pe un aeroport. Se cere ca programul nostru să răspundă la următoarele întrebări:
-În ce zile ale săptămânii există zbor direct între Londra și București?
-Cum se poate ajunge din București în Roma, joia?
-Vreau să vizitez Milan, București și Viena cu plecare din Londra marți și revenirea în
Londra vineri. În ce ordine ar trebui să vizitez orașele astfel încât să nu am mai mult de
un zbor pe zi?

prolog_logo
Cod Sursa PROLOG

 

%rutele zborurilor
:-op(50,xfy,:).
zbor( Loc1, Loc2, Ziua, Fnum, Plec, Sos) :-
tabel_timp( Loc1 , Loc2, Lista_zbor),
membru( Plec / Sos / Fnum / Lista_zile , Lista_zbor),
ziua_zbor( Ziua, Lista_zile).
membru( X, [X|L] ).
membru( X, [Y|L] ) :- membru( X, L).
ziua_zbor( Ziua, Lista_zile) :-
membru( Ziua, Lista_zile).
ziua_zbor( Ziua, mereu) :-
membru( Ziua, [lu,ma,mi,jo,vi,sa,du] ).
ruta( P1, P2, Ziua, [P1-P2 : Fnum : Plec] ) :-
zbor( P1, P2, Ziua, Fnum, Plec, _).
ruta( P1, P2, Ziua, [P1-P3 : Fnum1 : Plec1 | Ruta ]):-
ruta( P3, P2, Ziua, Ruta),
zbor( P1, P3, Ziua, Fnum1, Plec1,Sos1),
timpplec( Ruta, Plec2),
transfer( Sos1, Plec2).
timpplec( [P1-P2 : Fnum : Plec | _ ], Plec).
transfer( Ore1 : Min1, Ore2 : Min2) :-
60 * (Ore2 – Ore1) + Min2 – Min1 >= 40.
%baza de date a zborurilor
tabel_timp( roma, londra,
[ 9:40 / 10:50 / ba4733 / mereu,
13:40 / 14:50 / ba4773 / mereu,
19:40 / 20:50 / ba4833 / [lu,ma,mi,jo,vi,du] ] ).
tabel_timp( londra, roma,
[ 9:40 / 10:50 / ba4732 / mereu,
11:40 / 12:50 / ba4752 / mereu,
18:40 / 19:50 / ba4822 / [lu,ma,mi,jo,vi] ] ).
tabel_timp( londra, bucuresti,
[ 13:20 / 16:20 / ju201 / [vi],
13:20 / 16:20 / ju213 / [du] ] ).
tabel_timp( londra, viena,
[ 9:10 / 11:45 / ba614 / mereu,
14:45 / 17:20 / sr805 / mereu ] ).
tabel_timp( londra, milan,
[ 8:30 / 11:20 / ba510 / mereu,
11:10 / 13:50 / az459 / mereu ] ).
tabel_timp( bucuresti, viena,
[ 11:30 / 12:40 / ju322 / [ma,jo] ] ).
tabel_timp( bucuresti, londra,
[ 11:10 / 12:20 / yu200 / [vi],
11:25 / 12:20 / yu212 / [du] ] ).
tabel_timp( milan, londra,
[ 9:10 / 10:00 / az458 / mereu,
12:20 / 13:10 / ba511 / mereu ] ).
tabel_timp( milan, viena,
[ 9:25 / 10:15 / sr621 / mereu,
12:45 / 13:35 / sr623 / mereu ] ).
tabel_timp( viena, bucuresti,
[ 13:30 / 14:40 / yu323 / [ma,jo] ] ).
tabel_timp( viena, londra,
[ 9:00 / 9:40 / ba613 / [lu,ma,mi,jo,vi,sa],
16:10 / 16:55 / sr806 / [lu,ma,mi,jo,vi,du] ] ).
tabel_timp( viena, milan,
[ 7:55 / 8:45 / sr620 / mereu ] ).
del(X,[X|T],T).
perm([],[]).
del(X,[Y|T],[Y|T1]):-del(X,T,T1).
insert(X,L,L1):-del(X,L1,L).
perm([X|L],P):-perm(L,L1),insert(X,L1,P).

Interogări:

unu

doi

trei

Leave a comment