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

% ЧейХод..Бх : Бу..Лх : Лу..Чх : Чу..Глуб

% ЧейХод - с чьей стороны ход в этой позиции ('б' или 'ч')

% Бх, Бу - координаты белого короля

% Лх, Лу - координаты белой ладьи

% Чх, Чу - координаты черного короля

% Глуб - глубина, на которой находится эта позиция в дереве

% поиска

% Отношения выбора элементов позиции

        чей_ход( ЧейХод.._, ЧейХод).

        бк( _..БК.._, БК).                                         % Белый король

        бл( _.._..БЛ.._, БЛ).                                     % Белая ладья

        чк( _.._.._..ЧК.._, ЧК).                                % Черный король

        глуб( _.._.._.._..Глуб, Глуб).

        восст_глуб( ЧХ..Б..Л..Ч..Г, ЧХ..Б..Л..Ч..0).

                                           % Формируется копия позиции, глубина устанавливается в 0

% Некоторые отношения между клетками доски

        сосед_чсл( N, N1) :-             % Соседнее число "в пределах доски"

                ( N1 is N + 1;

                  N1 is N - 1 ),

                внутри( N1).

        внутри( N) :-

                N > 0, N < 9.

        сосед_диаг( X : Y, X1 : Y1) :-

                                    % Соседние клетки по диагонали

                сосед_чсл( X, X1 ), сосед_чсл( Y, Y1).

        сосед_верт( X : Y, X : Y1) :-

                                    % Соседние клетки по вертикали

                сосед_чсл( Y, Y1).

        сосед_гор( X : Y, X1 : Y) :-

                                    % Соседние клетки по горизонтали

                сосед_чсл( X, X1).

        сосед( S, S1) :-

                                    % Соседние клетки (предпочтение - диагонали)

                сосед_диаг( S, S1);

                сосед_гор( S, S1);

                сосед_верт( S, S1).

        конец_игры( Поз) :-

                мат( Поз).

% Предикаты, ограничивающие ходы

% Специализированное генераторы ходов вида:

% ход( Ограничение, Поз, Ход, Поз1)

        ход( глубина < Макс, Поз, Ход, Поз1) :-

                глуб( Поз, Г),

                Г < Макс,  !.

        ход( глубина = Г, Поз, Ход, Поз1) :-

                глуб( Поз, Г),  !.

        ход( сначала диаг, б..Б..Л..Ч..Г, Б-Б1,

                                            ч..Б1..Л..Ч..Г1) :-

                Г1 is Г + l,

                сосед( Б, Б1),

                                    % "сосед" порождает сначала диагональные ходы

                not сосед( Б1, Ч),                                 % Не попасть под шах

                Б1 \== Л.                                               % Не столкнуться с ладьей

        ход( ход ладьей, б..Б..Лх : Лу..Ч..Г, Лх : Лу-Л,

                                                                ч..Б..Л..Ч..Г1) :-

                Г1 is Г + 1,

                коорд( I),                                               % Число между 1 и 8

                ( Л = Лх : I; Л = I : Лу),

                                    % По горизонтали или по вертикали

                Л \== Лх : Лу,                                      % Обязательно двигаться

                not мешает( Лх : Лу, Б, Л).                % Мешает белый король

        ход( ход_шах, Поз, Л-Лх : Лу, Поз1) :-

                бл( Поз, Л),

                чк( Поз, Чх : Чу),

                ( Лх = Чх; Лу = Чу),

                                    % Ладья и черный король на одной линии

                ход( ход_ладьей, Поз, Л-Лх : Лу, Поз1).

        ход( разреш, б..П, М, П1) :-

                ( Огр = сначала_диаг; Огр = ход ладьей),

                ход( Огр, б..П, М, П1).

        ход( разреш, ч..Б..Л..Ч..Г, Ч-Ч1, б..Б..Л..Ч1..Г1) :-

                Г1 is Г + 1,

                сосед( Ч, Ч1),

                not шах( б..Б..Л..Ч1..Г1).

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

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

        шах( _..Б..Лх : Лу..Чх : Чу.._ ) :-

                сосед( Б, Чх : Чу);                                  % Короли рядом

                ( Лх = Чх; Лу = Чу),

                Лх : Лу \== Чх : Чу,                                % Нет взятия ладьи

                not мешает( Лх : Лу, Б, Чх : Чу).

        мешает( S, S1, S1) :-  !.

        мешает( X1 : Y, X2 : Y, Х3 : Y) :-

                упоряд( X1, Х2, Х3),  !.

        мешает( X : Y1, X : Y2, X : Y3) :-

                упоряд( Y1, Y2, Y3).

        упоряд( N1, N2, N3) :-

                N1 < N2, N2 < N3;

                N3 < N2, N2 < N1.

        коорд( 1).  коорд( 2).   коорд( 3).  коорд( 4).

        коорд( 5).  коорд( 6).   коорд( 7).  коорд( 8).

        % Предикаты целей

        любая_поз( Поз).

        ход_противника( б.._ ).                                  % Противник ходит белыми

        мат( Поз) :-

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

                шах( Поз),

                not разрход( Поз, _, _ ).

        пат( Поз) :-

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

                not шах( Поз),

                not разрход( Поз, _, _ ).

        уменьш_простр( Поз, КорнПоз) :-

                простр( Поз, Пр),

                простр( КорнПоз, КорнПр),

                Пр < КорнПр.

        ладья_под_боем( ЧейХод..Б..Л..Ч.._ ) :-

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

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

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

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

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

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

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

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

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