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

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

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

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

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

        восст_глуб( ЧХ..Б..Л..Ч..Г, ЧХ..Б..Л..Ч..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, Ч),

Вы читаете Prolog
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату