Читаем Prolog полностью

(3)        (питер это хищник) это правда было


                    ( 'выведено по' прав3 из


            (питер это млекопитающее) это правда было


                    ( 'выведено по' прав1 из


            (питер имеет шерсть) это правда было сказано)


            и


            (питер ест мясо) это правда было сказано )

На рис. 14.10 показана прологовская программа для процедуры рассмотреть. В этой программе реализованы принципы разд. 14.4.1 с использованием только что описанных структур данных.

% Процедура


%


% рассмотреть( Цель, Трасса, Ответ)


%


% находит Ответ на вопрос Цель. Трасса - это цепочка


% целей-предков и правил. "рассмотреть" стремится найти


% положительный ответ на вопрос. Ответ "ложь" выдается


% только в том случае, когда рассмотрены все возможности,


% и все они дали результат "ложь".

        :-ор( 900, xfx, :).


        :-ор( 800, xfx, было).


        :-ор( 870, fx, если).


        :-ор( 880, xfx, то).


        :-ор( 550, xfy, или).


        :-ор( 540, xfy, и).


        :- ор( 300, fx, 'выведено по').


        :- ор( 600, xfx, из).


        :- ор( 600, xfx, по).

% В программе предполагается,что ор( 700, хfх, это), ор( 500, fx, не)

        рассмотреть( Цель, Трасса, Цель это правда


                                                было 'найдено как факт') :-


                факт : Цель.

% Предполагается, что для каждого типа цели


% существует только одно правило

        рассмотреть( Цель, Трасса,


                Цель это ПравдаЛожь


                было 'выведено по' Прав из Ответ) :-


            Прав : если Условие то Цель,


                                    % Правило, относящееся к цели


            рассмотреть( Условие, [Цель по Прав | Трасса], Ответ),


            истинность( Ответ, ПравдаЛожь).

        рассмотреть( Цель1 и Цель2, Трасса, Ответ) :-  !,


                рассмотреть( Цель1, Трасса, Ответ1),


                продолжить( Ответ1, Цель1 и Цель2, Трасса, Ответ).

        рассмотреть( Цель1 или Цель2, Трасса, Ответ) :-


                рассм_да( Цель1, Трасса, Ответ);


                                    % Положительный ответ на Цель1


                рассм_да( Цель2, Трасса, Ответ).


                                    % Положительный ответ на Цель2

        рассмотреть( Цель1 или Цель2, Трасса,


                                                                Ответ1 и Ответ2) :-  !,


                not рассм_да( Цель1, Трасса, _ ),


                not рассм_да( Цель2, Трасса, _ ),


                                    % Нет положительного ответа


                рассмотреть( Цель1, Трасса, Ответ1),


                                    % Ответ1 отрицательный


                рассмотреть( Цель2, Трасса, Ответ2).


                                    % Ответ2 отрицательный

        рассмотреть( Цель, Трасса,


                                            Цель это Ответ было сказано) :-


                ответпольз( Цель, Трасса, Ответ).        % Ответ дан пользователем


        рассм_да( Цель, Трасса, Ответ) :-


                рассмотреть( Цель, Трасса, Ответ),


                положительный( Ответ).

        продолжить( Ответ1, Цель1 и Цель2, Трасса, Ответ) :-


                положительный( Ответ1),


                рассмотреть( Цель2, Трасса, Ответ2),


                ( положительный( Ответ2), Ответ = Ответ1 и Ответ2;


                отрицательный( Ответ2), Ответ = Ответ2).

        продолжить( Ответ1, Цель1 и Цель2, _, Ответ1) :-


                отрицательный( Ответ1).

        истинность( Вопрос это ПравдаЛожь было Найдено,


                                                                            ПравдаЛожь) :-  !.

        истинность( Ответ1 и Ответ2, ПравдаЛожь) :-


                истинность( Ответ1, правда),


                истинность( Ответ2, правда),  !,


                ПравдаЛожь = правда;


                ПравдаЛожь = ложь.

        положительный( Ответ) :-


                истинность( Ответ, правда).

        отрицательный( Ответ) :-


                истинность( Ответ, ложь).

Рис. 14. 10.  Основная процедура оболочки экспертной системы.


14. 5. 2.    Процедура    ответпольз

Прежде чем перейти к написанию процедуры ответпольз, давайте рассмотрим одну полезную вспомогательную процедуру

        принять( Ответ)

Перейти на страницу:

Похожие книги

Слово о полку Игореве
Слово о полку Игореве

Исследование выдающегося историка Древней Руси А. А. Зимина содержит оригинальную, отличную от общепризнанной, концепцию происхождения и времени создания «Слова о полку Игореве». В книге содержится ценный материал о соотношении текста «Слова» с русскими летописями, историческими повестями XV–XVI вв., неординарные решения ряда проблем «слововедения», а также обстоятельный обзор оценок «Слова» в русской и зарубежной науке XIX–XX вв.Не ознакомившись в полной мере с аргументацией А. А. Зимина, несомненно самого основательного из числа «скептиков», мы не можем продолжать изучение «Слова», в частности проблем его атрибуции и времени создания.Книга рассчитана не только на специалистов по древнерусской литературе, но и на всех, интересующихся спорными проблемами возникновения «Слова».

Александр Александрович Зимин

Литературоведение / Научная литература / Древнерусская литература / Прочая старинная литература / Прочая научная литература / Древние книги