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

 конкретизация( Копия, Цель), !. % Ответ известен

% Найти все известные решения для Цель с индексами, начиная с N

ответпольз( Цель, _, _, правда, N) :-

 сказано( Цель, правда, М),

 М >= N.

% Все уже сказано об утверждении Цель?

ответпольз( Цель, Копия, _, Ответ, _) :-

 конец_ответов( Копия),

 конкретизация( Копия, Цель), !, % Уже все сказано

 fail.

% Попросить пользователя дать (еще) решения

ответпольз( Цель, _, Трасса, Ответ, N) :-

 спросить_польз( Цель, Трасса, Ответ, N).

спросить_польз( Цель, Трасса, Ответ, N) :-

 можно спросить( Цель, ВнешФормат),

 формат( Цель, ВнешФормат, Вопрос, [], Перем),

  % Получить формат вопроса

 спросить( Цель, Вопрос, Перем, Трасса, Ответ, N).

спросить( Цель, Вопрос, Перем, Трасса, Ответ, N) :-

 nl,

 ( Перем = [], !,                % Сформулировать вопрос

 write( 'Это правда: ');

 write( 'Есть (еще) решения для :' )),

 write( Вопрос), write( '?'),

 принять( Ответ1), !,            % Ответ1 - да/нет/почему

 обработать( Ответ1, Цель, Вопрос, Перем,

             Трасса, Ответ, N).

обработать( почему, Цель, Вопрос, Перем,

 Трасса, Ответ, N):-

 выд_трассу( Трасса),

 спросить( Цель, Вопрос, Перем, Трасса, Ответ, N).

обработать( да, Цель,_, Перем, Трасса, правда, N) :-

 след_индекс( Инд),

  % Получить новый индекс для "сказано"

 Инд1 is Инд + 1,

 ( запрос_перем( Перем),

   assertz( сказано( Цель, правда, Инд) );

    % Запись решения

 копия( Цель, Копия),            % Копирование цели

 ответпольз( Цель, Копия, Трасса, Ответ, Инд1) ).

  % Есть еще решения?

обработать( нет, Цель, _, _, _, ложь, N) :-

 копия( Цель, Копия),

 сказано( Копия, правда, _), !,

  % 'нет' означает, больше нет решений

 assertz( конец_ответов( Цель) ),

  % Отметить конец ответов

 fail;

 след_индекс( Инд),

  % Следующий свободный индекс для "сказано"

 assertz( сказано( Цель, ложь, Инд) ).

  % 'нет' означает нет ни одного решения

формат( Пер, Имя, Имя, Перем, [Пер/Имя | Перем]) :-

 var( Пер), !.

формат( Атом, Имя, Атом, Перем, Перем) :-

 atomic( Атом), !,

 atomic( Имя).

формат( Цель, Форм, Вопрос, Перем0, Перем) :-

 Цель =.. [Функтор | Apг1],

 Форм =.. [Функтор | Форм1],

 формвсе( Apг1, Форм1, Арг2, Перем0, Перем),

 Вопрос =.. [Функтор | Арг2].

формвсе( [], [], [], Перем, Перем).

формвсе( [X | СпХ], [Ф | СпФ], [В | СпВ], Перем0, Перем) :-

 формвсе( СпХ, СпФ, СпВ, Перем0, Перем1),

 формат( X, Ф, В, Перем1, Перем).

запрос_перем( []).

запрос_перем( [Переменная/Имя | Переменные]) :-

 nl, write( Имя), write( '='),

 read( Переменная),

 запрос_перем( Переменные).

выд_трассу( []) :-

 nl, write( 'Это был ваш вопрос'), nl.

выд_трассу( [Цель по Прав | Трасса] ) :-

 nl, write( 'Чтобы проверить по' ),

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

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

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

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

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

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

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

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

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