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

 сосед_чсл( 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 разрход( Поз, _, _ ).

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

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

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

 Пр < КорнПр.

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

 расст( Б, Л, P1),

 расст( Ч, Л, Р2),

 ( ЧейХод = б, !, P1 > Р2 + 1;

   ЧейХод = ч,  !,  P1 > Р2 ).

ближе_к_клетке( Поз, КорнПоз) :-

 расст_до_клетки( Поз, P1),

 расст_до_клетки( КорнПоз, Р2),

 P1 < Р2.

расст_до_клетки( Поз, Мрасст) :-

               % Манхеттеновское расстояние

 бк( Поз, БК), % между БК и критической клеткой

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

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

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

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

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

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

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

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

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