ладья занимает вертикальную или горизонтальную линию, отделяющую одного короля от другого.
Описанные выше принципы реализованы во всех деталях в таблице советов на языке AL0, показанной на рис. 15.7. Эта таблица может работать под управлением интерпретатора рис. 15.6. Рис. 15.8 иллюстрирует смысл некоторых из предикатов, использованных в таблице советов, а также показывает, как эта таблица работает.
В таблице используются следующие предикаты:
мат | мат королю противника |
пат | пат королю противника |
потеря_ладьи | король противника может взять ладью |
ладья_под_боем | король противника может напасть на ладью прежде, чем наш король сможет ее защитить |
уменьш_простр | уменьшилось 'жизненное пространство' короля противника, ограничиваемое ладьей |
раздел | ладья занимает вертикальную или горизонтальную линию, разделяющую королей |
ближе_к_клетке | наш король приблизился к 'критической клетке' (см. рис. 15.9), т.е. манхеттеновское расстояние до нее уменьшилось |
l_конфиг | 'L-конфигурация' (рис. 15.9) |
простр_больше_2 | 'жизненное пространство' короля противника занимает больше двух клеток |
глубина = N | ход на глубине N дерева поиска |
разреш | любой разрешенный ход |
ход_шах | ход, объявляющий шах |
ход_ладьей | ход ладьей |
нет_хода | ни один ход не подходит |
сначала_диаг | ход королем, преимущественно по диагонали |
% Окончание 'король и ладья против короля' на языке AL0
% Правила
правило_края:
если король_противника_на_краю и короли_рядом
то [мат_2, потеснить, приблизиться,
сохранить_простр, отделить_2, отделить_3].
иначе_правило
если любая_поз
то [ потеснить, приблизиться, сохранить_простр,
отделить_2, отделить_3].
% Элементарные советы
совет( мат_2,
мат :
не потеря_ладьи и король_противника_на_краю:
(глубина = 0) и разреш
затем (глубина = 2) и ход_шах :
(глубина = 1) и разреш ).
совет( потеснить,
уменьш_простр и не ладья_под_боем и
раздел и не пат :
не потеря_ладьи :
(глубина = 0) и ход_ладьей :