Программирование на языке Пролог для искусственного интеллекта | страница 71



>% ПЛАНИРОВЩИК ВОЗДУШНЫХ МАРШРУТОВ


>:- op( 50, xfy, :).


>рейс( Пункт1, Пункт2, День, Np, ВрОтпр, ВрПриб) :-

> расписание( Пункт1, Пункт2, СписРейсов),

> принадлежит( ВрОтпр / ВрПриб / Nр / СписДней, СписРейсов),

> день_выл( День, СписДней).


>принадлежит( X, [X | L] ).

>принадлежит( X, [Y | L] ) :-

> принадлежит( X, L ).


>день_выл( День, СписДней) :-

> принадлежит( День, СписДней).

>день_выл( День, ежедневно) :-

> принадлежит( День, [пн, вт, ср, чт, пт, сб, вс] ).


>маршрут( P1, P2, День, [P1-Р2 : Np : ВрОтпр] ) :-

>  % прямой рейс

> рейс( P1, P2, День, Np, ВрОтпр, _ ).

>маршрут( P1, Р2, День, [Pl-P3 : Np1 : Oтпp1 | Маршрут]) :-

>  % маршрут с пересадками

> маршрут( Р3, P2, День, Маршрут ),

> рейс( P1, Р3, День, Npl, Oтпp1, Приб1),

> вр_отпр( Маршрут, Отпр2),

> пересадка( Приб1, Отпр2).


>вр_отпр( [P1-Р2 : Np : Отпр | _ ], Отпр).


>пересадка( Часы1 : Минуты1, Часы2 : Минуты2) :-

> 60 * (Часы2-Часы1) + Минуты2 - Минуты1 >= 40


>% БАЗА ДАННЫХ О РЕЙСАХ САМОЛЕТОВ


>расписание( эдинбург, лондон,

> [ 9:40 / 10:50 / bа4733 / ежедневно,

>   13:40 / 14:50 / ba4773 / ежедневно,

>   19:40 / 20:50 / bа4833 / [пн, вт, ср, чт, пт, вс] ] ).


>расписание( лондон, эдинбург,

> [ 9:40 / 10:50 / bа4732 / ежедневно,

>   11:40 / 12:50 / bа4752 / ежедневно,

>   18:40 / 19:50 / bа4822 / [пн, вт, ср, чт, пт] ] ),


>расписание( лондон, любляна,

> [13:20 / 16:20 / ju201 / [пт],

>  13:20 / 16:20 / ju213 / [вс] ] ).


>расписание( лондон, цюрих,

> [ 9:10 / 11:45 / bа614 / ежедневно,

>   14:45 / 17:20 / sr805 / ежедневно ] ).


>расписание( лондон, милан,

> [ 8:30 / 11:20 / bа510 / ежедневно,

>   11:00 / 13:50 / az459 / ежедневно ] ).


>расписание( любляна, цюрих,

> [11:30 / 12:40 / ju322 / [вт,чт] ] ).


>расписание( любляна, лондон,

> [11:10 / 12:20 / yu200 / [пт],

>  11:25 / 12:20 / yu212 / [вс] ] ).


>расписание( милан, лондон,

> [ 9:10 / 10:00 / az458 / ежедневно,

>   12:20 / 13:10 / bа511 / ежедневно ] ).


>расписание( милан, цюрих,

> [ 9:25 / 10:15 / sr621 / ежедневно,

>   12:45 / 13:35 / sr623 / ежедневно ] ).


>расписание( цюрих, любляна,

> [13:30 / 14:40 / yu323 / [вт, чт] ] ).


>расписание( цюрих, лондон,

> 9:00 / 9:40 / bа613 /

> [ пн, вт, ср, чт, пт, сб],

>   16:10 / 16:55 / sr806 / [пн, вт, ср, чт, пт, сб] ] ).


>расписание( цюрих, милан,

> [ 7:55 / 8:45 / sr620 / ежедневно ] ).

Рис. 4.5.  Планировщик воздушных маршрутов и база данных о рейсах самолетов.


Вот некоторые примеры вопросов к планировщику:

• По каким дням недели существуют прямые рейсы из Лондона в Люблину?

>?- рейс( лондон, любляна, День, _, _, _ ).


>День = пт;