ИЛИ-дереву. Этот алгоритм также напоминает алгоритм построения решающего дерева ответа на вопрос пользователя, применявшийся в оболочке экспертной системы (гл. 14).

Программа на рис. 15.6 составлена в предположении, что она играет белыми, а ее противник - черными. Программа запускается процедурой

% Миниатюрный интерпретатор языка AL0

%

% Эта программа играет, начиная с заданной позиции,

% используя знания, записанные на языке AL0

        :- ор( 200, xfy, :).

        :- ор( 220, xfy, ..).

        :- ор( 185, fx, если).

        :- ор( 190, xfx, то).

        :- ор( 180, xfy, или).

        :- ор( 160, xfy, и).

        :- ор( 140, fx, не).

        игра( Поз) :-                                                   % Играть, начиная с Поз

                игра( Поз, nil).

                                          % Начать с пустого форсированного дерева

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

                отобр( Поз),

                ( конец_игры( Поз),                              % Конец игры?

                        write( 'Конец игры'),  nl,  !;

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

                        игра( Поз1, ФорсДер1) ).

% Игрок ходит в соответствии с форсированным деревом

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

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

                разрход( Поз, Ход, Поз1),

                показать_ход( Ход).

% Прием хода противника

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

                чей_ход( Поз, ч),

                write( 'Ваш ход:'),

                read( Ход),

                ( разрход( Поз, Ход, Поз1),

                        поддер( ФДер, Ход, ФДер1),  !;

                                          % Вниз по форс. дереву

                  write( 'Неразрешенный ход'), nl,

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

% Если текущее форсированное дерево пусто, построить новое

        сделать_ход( Поз, nil, Поз1, ФДер1) :-

                чей_ход( Поз, б),

                восст_глуб( Поз, Поз0),

                                        % Поз0 = Поз с глубиной 0

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

                                        % Новое форсированное дерево

               

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

0

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

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