Программирование на языке Пролог для искусственного интеллекта | страница 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. Планировщик воздушных маршрутов и база данных о рейсах самолетов.
Вот некоторые примеры вопросов к планировщику:
• По каким дням недели существуют прямые рейсы из Лондона в Люблину?
>?- рейс( лондон, любляна, День, _, _, _ ).
>День = пт;