деревьев для всех преемников вершины Верш.

% Поиск в глубину для И / ИЛИ-графов

% Процедура решить( Верш, РешДер) находит решающее дерево для

% некоторой вершины в И / ИЛИ-графе

        решить( Верш, Верш) :-         % Решающее дерево для целевой

                цель( Верш).                    % вершины - это сама вершина

        решить( Верш, Верш ---> Дер) :-

                Верш ---> или : Вершины,        % Верш - ИЛИ-вершина

                принадлежит( Верш1, Вершины),

                                        % Выбор преемника  Верш1  вершины  Верш

                решить( Bepш1, Дер).

        решить( Верш, Верш ---> и : Деревья) :-

                Верш ---> и : Вершины,              % Верш - И-вершина

                решитьвсе( Вершины, Деревья).

                                         % Решить все задачи-преемники

        решитьвсе( [ ], [ ]).

        решитьвсе( [Верш | Вершины], [Дер | Деревья]) :-

                решить( Верш, Дер),

                решитьвсе( Вершины, Деревья).

        отобр( Дер) :-                                         % Отобразить решающее дерево

                отобр( Дер, 0),  !.                           % с отступом 0

        отобр( Верш ---> Дер, Н) :-

                                       % Отобразить решающее дерево с отступом Н

                write( Верш), write( '--->'),

                H1 is H + 7,

                отобр( Дер, H1),  !.

        отобр( и : [Д], Н) :-

                                       % Отобразить И-список решающих деревьев

        отобр( Д, Н).

        отобр( и : [Д | ДД], Н) :-

                                       % Отобразить И-список решающих деревьев

                отобр( Д, Н),

                tab( H),

                отобр( и : ДД, Н),  !.

        отобр( Верш, Н) :-

                write( Верш), nl.

Рис. 13. 8.  Поиск в глубину для И / ИЛИ-графов. Эта программа может

зацикливаться. Процедура решить находит решающее дерево, а

процедура отобр показывает его пользователю. В процедуре отобр

предполагается, что на вывод вершины тратится только один символ.

Например, при поиске в И / ИЛИ-графе рис. 13.4 первое найденное решение задачи, соответствующей самой верхней вершине  а,   будет иметь следующее представление:

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

0

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

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