Читаем Программирование на языке Пролог для искусственного интеллекта полностью

 tab( H), write( 'и'), nl,

 отобр( Ответ2, H).

отобр( Ответ был Найден, H) :-   % Отступ H

 tab( H), печответ( Ответ),      % Показ заключения

 nl, tab( H),

 write( 'было'),

 отобр1( Найден, H).             % Показ доказательства

отобр1( Выведено из Ответ, H) :- !,

 write( Выведено), write( 'из'), % Показ имени правила

 nl, H1 is H + 4,

 отобр( Ответ, H1).              % Показ "предшественника"

отобр1( Найдено, _ ) :-

  % Найдено = 'сказано' или 'найдено как факт'

 write( Найдено), nl.

печответ( Цель это правда) :- !,

 write( Цель).      % На выходе 'это правда' опускается

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

 write( Ответ).

Рис. 14.12. Оболочка экспертной системы: Отображение окончательного результата и объяснение типа "как".

<p>14.5.6. Одно замечание по поводу программы-оболочки</p>

В некоторых местах нашей программы-оболочки обнаруживается недостаток той "декларативной ясности", которая так характерна для программ, написанных на Прологе. Причина состоит в том, что нам пришлось предусмотреть в этой программе довольно жесткое управление процессом функционирования оболочки. Ведь, согласно нашему замыслу, экспертная система должна была не только находить ответы на вопросы, но и делать это некоторым разумным с точки зрения пользователя способом. В связи с этим нам пришлось реализовать вполне определенное поведение системы в процессе решения задач, а не просто некоторое отношение ввода-вывода. В результате получилась программа более процедурного характера, чем обычно. Все это может послужить примером ситуации, когда, не имея возможности рассчитывать на собственные процедурные механизмы Пролога, мы вынуждены взять на себя детальное описание процедурного поведения системы.

<p>14.5.7. Цели с отрицанием</p>

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

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

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

 обратить( Ответ1, Ответ).

  % Получить обратное истинностное значение

обратить( Цель это правда было Найдено,

 ( не Цель) это ложь было Найдено).

обратить( Цель это ложь было Найдено,

 ( не Цель) это правда было Найдено).

% Процедура-драйвер верхнего уровня

эксперт :-

 принять_вопрос( Вопрос),

  % Ввести вопрос пользователя

 ( ответ_да( Вопрос);

  % Попытка найти положительный ответ

 ответ_нет( Вопрос) ).

  % Если нет положительного ответа, то найти отрицательный

ответ_да( Вопрос) :-

  % Искать положительный ответ на Вопрос

 статус( отрицательный),

  % Пока еще нет положительного ответа

 рассмотреть( Вопрос, [], Ответ), % Трасса пуста

 положительный( Ответ), % Искать положительный ответ

 статус( положительный),

  % Найден положительный ответ

 выдать( Ответ), nl,

 write( 'Нужны еще решения?' ),

 принять( Ответ1), % Прочесть ответ пользователя

 Ответ1 = нет.

  % В противном случае возврат к "рассмотреть"

ответ_нет( Вопрос):-

  % Искать отрицательный ответ на Вопрос

 retract( пока_нет_положительного_решения), !,

  % Не было положительного решения?

 рассмотреть( Вопрос, [], Ответ),

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

 выдать( Ответ), nl,

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных