собрать( или : _, Дер, да, Дер, да):-  !.           % Есть решение ИЛИ-списка

        собрать( или : ДД, Дер, нет, или : НовДД, нет) :-

                встав( Дер, ДД, НовДД),  !.                     % Нет решения ИЛИ-списка

        собрать( или : [ ], _, никогда, _, никогда) :-  !.

                                                                                     % Больше нет кандидатов

        собрать( или:ДД, _, никогда, или:ДД, нет) :-  !.

                                                                                     % Есть еще кандидаты

        собрать( и : ДД, Дер, да, и : [Дер Э ДД], да ) :-

                всереш( ДД),  !.                                          % Есть решение И-списка

        собрать( и : _, _, никогда, _, никогда) :-  !.

                                                                                     % Нет решения И-списка

        собрать( и : ДД, Дер, ДаНет, и : НовДД, нет) :-

                встав( Дер, ДД, НовДД),  !.                     % Пока нет решения И-списка

% 'расшлист' формирует дерево из вершины и ее преемников

        расшлист( Верш, С, дер( Верш, F, С, Оп : Поддеревья)) :-

                Верш---> Оп : Преемники,

                оценить( Преемники, Поддеревья),

                оценка( Оп : Поддеревья, Н), F is С + Н.

        оценить( [ ], [ ]).

        оценить( [Верш/С | ВершиныСтоим], Деревья) :-

                h( Верш, Н), F is С + Н,

                оценить( ВершиныСтоим, Деревья1),

                встав( лист( Верш, F, С), Деревья1, Деревья).

% 'всереш' проверяет, все ли деревья в списке 'решены'

        всереш([ ]).

        всереш( [Дер | Деревья] ) :-

                реш( Дер),

                всереш( Деревья).

        реш( решдер( _, _, _ ) ).

        реш( решлист( _ , _) ).

        f( Дер, F) :-                                                              % Извлечь F-оценку дерева

                arg( 2, Дер, F),  !.                                            % F - это 2-й аргумент Дер

% встав( Дер, ДД, НовДД) вставляет Дер в список

% деревьев ДД; результат - НовДД

        встав( Д, [ ], [Д] ) :-

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

0

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

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