сделать_ход( Поз0, ФДер, Поз1, ФДер1).

% Выбрать форсированное поддерево, соответствующее Ход' у

        поддер( ФДеревья, Ход, Фдер) :-

                принадлежит( Ход . . Фдер, ФДеревья),  !.

        поддер( _, _, nil).

        стратегия( Поз, ФорсДер) :-

                                        % Найти форс. дерево для Поз

                Прав : если Условие то СписСов,

                                        % Обращение к таблице советов

                удовл( Условие, Поз, _ ),  !,

                                        % Сопоставить Поз с предварительным условием

                принадлежит( ИмяСовета, СписСов),

                                        % По очереди попробовать элем. советы

                nl, write( 'Пробую'), write( ИмяСовета),

                выполн_совет( ИмяСовета, Поз, ФорсДер),  !.

        выполн_совет( ИмяСовета, Поз, Фдер) :-

                совет( ИмяСовета, Совет),

                                        % Найти элементарный совет

                выполн( Совет, Поз, Поз, ФДер).

                % 'выполн' требует две позиции для сравнивающих предикатов

        выполн( Совет, Поз, КорнПоз, ФДер) :-

                поддержка( Совет, ЦП),

                удовл( ЦП, Поз, КорнПоз),

                                        % Сопоставить Поз с целью-поддержкой

                выполн1( Совет, Поз, КорнПоз, ФДер).

        выполн1( Совет, Поз, КорнПоз, nil) :-

                главцель( Совет, ГлЦ),

                удовл( ГлЦ, Поз, КорнПоз),  !.

                                        % Главная цель удовлетворяется

        выполн1( Совет, Поз, КорнПоз, Ход .. ФДеревья) :-

                чей_ход( Поз, б),  !,                                  % Программа играет белыми

                ходы_игрока( Совет, ХодыИгрока),

                                        % Ограничения на ходы игрока

                ход( ХодыИгрока, Поз, Ход, Поз1),

                                        % Ход, удовлетворяющий ограничению

                выполн( Совет, Поз1, КорнПоз, ФДеревья).

        выполн1( Совет, Поз, КорнПоз, ФДеревья) :-

                чей_ход( Поз, ч),  !,                                 % Противник играет черными

                ходы_противника( Совет, ХодыПр),

                bagof ( Ход . . Поз1, ход( ХодыПр, Поз, Ход, Поз1), ХПспис),

                выполн_все( Совет, ХПспис, КорнПоз, ФДеревья).

                                        % Совет выполним во всех преемниках Поз

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

0

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

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