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

Вспомогательные отношения рейс, пересадка и вр_отпр запрограммировать легко; мы включили их в полный текст программы планировщика поездки на рис. 4.5. Там же приводится и пример базы данных расписания.

Наш планировщик исключительно прост и может рассматривать пути, очевидно ведущие в никуда. Тем не менее его оказывается вполне достаточно, если база данных о рейсах самолетов невелика. Для больших баз данных потребовалось бы разработать более интеллектуальный планировщик, который мог бы справиться с большим количеством путей, участвующих в перебора при нахождении нужного пути.

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

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

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

        День = пт;

        День = сб;

        no                 (нет)

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

:- ор( 50, xfy, :).

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

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

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

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

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

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

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

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

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

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

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

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

                                                % прямой рейс

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

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

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

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

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

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

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

вр_отпр( [Р1-Р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 / ежедневно ] ).

Вы читаете Prolog
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату