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

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

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

рассмотреть( Цель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. Основная процедура оболочки экспертной системы. 

<p>14.5.2. Процедура <code>ответпольз</code></p>

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

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

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

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

 read( Ответ1),

 означает( Ответ1, Значение), !,

  % Ответ1 означает что-нибудь?

 Ответ = Значение;                          % Да

 nl, write( 'Непонятно, попробуйте еще раз, % Нет

             пожалуйста'), nl,

 принять( Ответ). % Новая попытка

означает( да, да).

означает( д, да).

означает( нет, нет).

означает( н, нет).

означает( почему, почему).

означает( п, почему).

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

принять( да), интерп_да( ...);

принять( нет), интерп_нет( ...);

...

Здесь, если пользователь ответит "нет", то программа попросит его повторить свой ответ. Поэтому более правильный способ такой:

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

 ( Ответ = да, интерп_да( ...);

   Ответ = нет, интерп_нет( ...);

   ... )

Процедура

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

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

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

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

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

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

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

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

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

Все жанры