% Не попасть под шах

                Б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).  коорд(

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

0

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

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