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

% Эта программа играет, начиная с заданной позиции,

% используя знания, записанные на языке AL0

:- op( 200, xfy, :).

:- op( 220, xfy, ..).

:- op( 185, fx, если).

:- op( 190, xfx, то).

:- op( 180, xfy, или).

:- op( 160, xfy, и).

:- op( 140, fx, не).

игра( Поз) :-         % Играть, начиная с Поз

 игра( Поз, nil).

  % Начать с пустого форсированного дерева

игра( Поз, ФорсДер) :-

 отобр( Поз),

 ( конец_игры( Поз),  % Конец игры?

   write( 'Конец игры'), nl, !;

 сделать_ход( Поз, ФорсДер, Поз1, ФорсДер1), !,

 игра( Поз1, ФорсДер1) ).

% Игрок ходит в соответствии с форсированным деревом

сделать_ход( Поз, Ход .. ФДер1, Поз1, ФДер1) :-

 чей_ход( Поз, б),    % Программа играет белыми

 разрход( Поз, Ход, Поз1),

 показать_ход( Ход).

% Прием хода противника

сделать_ход( Поз, ФДер, Поз1, ФДер1) :-

 чей_ход( Поз, ч),

 write( 'Ваш ход:'),

 read( Ход),

 ( разрход( Поз, Ход, Поз1),

   поддер( ФДер, Ход, ФДер1), !;

    % Вниз по форс. дереву

 write( 'Неразрешенный ход'), nl,

 сделать_ход( Поз, ФДер, Поз1, ФДер1) ).

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

сделать_ход( Поз, nil, Поз1, ФДер1) :-

 чей_ход( Поз, б),

 восст_глуб( Поз, Поз0),

  % Поз0 = Поз с глубиной 0

 стратегия( Поз0, ФДер), !,

  % Новое форсированное дерево

 сделать_ход( Поз0, ФДер, Поз1, ФДер1).

% Выбрать форсированное поддерево, соответствующее Ход'у

поддер( ФДеревья, Ход, Фдер) :-

 принадлежит( Ход . . Фдер, ФДеревья), !.

поддер( _, _, nil).

стратегия( Поз, ФорсДер) :-

  % Найти форс. дерево для Поз

 Прав : если Условие то СписСов,

  % Обращение к таблице советов

 удовл( Условие, Поз, _ ), !,

  % Сопоставить Поз с предварительным условием

 принадлежит( ИмяСовета, СписСов),

  % По очереди попробовать элем. советы

 nl, write( 'Пробую'), write( ИмяСовета),

 выполн_совет( ИмяСовета, Поз, ФорсДер), !.

выполн_совет( ИмяСовета, Поз, Фдер) :-

 совет( ИмяСовета, Совет),

  % Найти элементарный совет

 выполн( Совет, Поз, Поз, ФДер).

% "выполн" требует две позиции для сравнивающих предикатов

выполн( Совет, Поз, КорнПоз, ФДер) :-

 поддержка( Совет, ЦП),

 удовл( ЦП, Поз, КорнПоз),

  % Сопоставить Поз с целью-поддержкой

 выполн1( Совет, Поз, КорнПоз, ФДер).

выполн1( Совет, Поз, КорнПоз, nil) :-

 главцель( Совет, ГлЦ),

 удовл( ГлЦ, Поз, КорнПоз), !.

  % Главная цель удовлетворяется

выполн1( Совет, Поз, КорнПоз, Ход .. ФДеревья) :-

 чей_ход( Поз, б), !, % Программа играет белыми

 ходы_игрока( Совет, ХодыИгрока),

  % Ограничения на ходы игрока

 ход( ХодыИгрока, Поз, Ход, Поз1),

  % Ход, удовлетворяющий ограничению

 выполн( Совет, Поз1, КорнПоз, ФДеревья).

выполн1( Совет, Поз, КорнПоз, ФДеревья) :-

 чей_ход( Поз, ч), !, % Противник играет черными

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

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

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

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

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

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

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

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

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