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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                ходы_противника( Совет, ХодыПр),

                bagof ( Ход . . Поз1, ход( ХодыПр, Поз, Ход, Поз1), ХПспис),

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

                                        % Совет выполним во всех преемниках Поз

        выполн_все( _, [ ], _, [ ]).

        выполн_все( Совет, [Ход . . Поз | ХПспис], КорнПоз,

                                                                [Ход . . ФД | ФДД] ) :-

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

                выполн_все( Совет, ХПспис, КорнПоз, ФДД).

% Интерпретация главной цели и цели-поддержки:

% цель - это И / ИЛИ / НЕ комбинация. имен предикатов

        удовл( Цель1 и Цель2, Поз, КорнПоз) :-  !,

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

                удовл( Цель2, Поз, КорнПоз).

        удовл( Цель1 или Цель2, Поз, КорнПоз) :-  !,

                ( удовл( Цель1, Поз, КорнПоз);

                удовл( Цель2, Поз, КорнПоз) ).

        удовл( не Цель, Поз, КорнПоз) :-  !,

                not удовл( Цель, Поз, КорнПоз ).

        удовл( Пред, Поз, КорнПоз) :-

                ( Усл =.. [Пред, Поз];

                                            % Большинство предикатов не зависит от КорнПоз

                    Усл =.. [Пред, Поз, КорнПоз] ),

                call( Усл).

% Интерпретация ограничений на ходы

        ход( Ходы1 и Ходы2, Поз, Ход, Поз1) :-  !,

                ход( Ходы1, Поз, Ход, Поз1),

                ход( Ходы2, Поз, Ход, Поз1).

        ход( Ходы1 затем Ходы2, Поз, Ход, Поз1) :-  !,

                ( ход( Ходы1, Поз, Ход, Поз1);

                  ход( Ходы2, Поз, Ход, Поз1) ).

% Доступ к компонентам элементарного совета

        главцель( ГлЦ : _, ГлЦ).

        поддержка( ГлЦ : ЦП : _, ЦП).

        ходы_игрока( ГлЦ : ЦП : ХодыИгрока : _, Ходы Игрока).

        ходы_противника( ГлЦ : ЦП: ХодыИгр : ХодыПр :_,

                                          ХодыПр).

        принадлежит( X, [X | Спис]).

        принадлежит( X, [Y | Спис]) :-

                принадлежит( X, Спис).

Рис. 15. 6.  Миниатюрный интерпретатор языка AL0.

        игра( Поз)

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

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

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

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

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

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

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

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

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