Простой интерпретатор программ управляемых образцами



16. 2.    Простой интерпретатор программ, управляемых образцами

Для описания модулей, управляемых образцами, мы применим следующую синтаксическую конструкцию:

        ЧастьУсловия ---> ЧастьДействия

Часть условия представляет собой список условий:

        [ Условие1, Условие2, Условие3, . . .]

где Условие1, Условие2 и т.д. - обычные прологовские цели. Предварительное условие запуска модуля считается выполненным, если все цели, содержащиеся в списке, достигнуты. Часть действия - это список действий:

        [ Действие1, Действие2, . . .]

Каждое отдельное действие - это, как и раньше, прологовская цель. Для того, чтобы выполнить список действий, нужно выполнить все действия из списка. Другими словами, все соответствующие цели должны быть удовлетворены. Среди допустимых действий будут действия, соответствующие манипулированию базой данных: добавить, удалить или заменить те или иные объекты базы данных.

На Рисунок 16.4 показано, как выглядит наша программа вычисления наибольшего общего делителя, записанная в соответствии с введенным нами синтаксисом.

line();

% Продукционные правила для нахождения наибольшего общего
% делителя (алгоритм Евклида)

        :- ор( 300, fx, число).

        [ число X, число Y, X > Y ] --->
        [ НовХ is X - Y, заменить( число X, число НовХ) ].

        [ число X ] ---> [ write( X), стоп ].



% Начальное состояние базы данных

        число 25.
        число 10.
        число 15.
        число 30.

line();



Содержание раздела