Неизвестно - Prolog

Здесь есть возможность читать онлайн «Неизвестно - Prolog» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Старинная литература, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Prolog: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Prolog»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Prolog — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Prolog», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

% расширспис( Деревья, Предел, Деревья1, ЕстьРеш)

% расширяет деревья из заданного списка с учетом

% ограничения Предел и выдает новый список Деревья1

% с "решающим статусом" ЕстьРеш.

расширспис( Деревья, Предел, Деревья1, ЕстьРеш) :-

выбор( Деревья, Дер, ОстДер, Предел, Предел1),

расширить( Дер, Предел1, НовДер, ЕстьРеш1),

собрать( ОстДер, НовДер, ЕстьРеш1, Деревья1, ЕстьРеш).

% "продолжить" решает, что делать после расширения

% списка деревьев

продолжить( да, Верш, С, Поддеревья, _,

решдер( Верш, F, Поддеревья), да): -

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

продолжить( никогда, _, _, _, _, _, никогда) :- !.

продолжить( нет, Верш, С, Поддеревья, Предел,

НовДер, ЕстьРеш) :-

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

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

НовДер, ЕстьРеш).

% "собрать" соединяет результат расширения дерева со списком деревьев

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

всереш([ ]).

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

реш( Дер),

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

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

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

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

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

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

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

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

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

реш( Д1), !.

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

реш( Д),

встав( Д, ДД, ДД1), !.

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

f( Д, F), f( Д1, F1), F=< F1, !.

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

встав( Д, ДД, ДД1).

% "оценка" находит "возвращенную" F-оценку И / ИЛИ-списка деревьев

оценка( или :[Дер | _ ], F) :-

% Первое дерево ИЛИ-списка - наилучшее

f( Дер, F), !.

оценка( и :[ ], 0) :- !.

оценка( и : [Дер1 | ДД], F) :-

f( Дер1, F1),

оценка( и : ДД, F2),

F is F1 + F2, !.

оценка( Дер, F) :-

f( Дер, F).

% Отношение выбор( Деревья, Лучшее, Остальные, Предел, Предел1):

% Остальные - И / ИЛИ-список Деревья без его "лучшего" дерева

% Лучшее; Предел - ограничение для Списка Деревья, Предел1 -

% ограничение для дерева Лучшее

выбор( Оп : [Дер], Дер, Оп : [ ], Предел, Предел) :- !.

% Только один кандидат

выбор( Оп : [Дер | ДД], Дер, Оп : ДД, Предел, Предел1) :-

оценка( Оп : ДД, F),

( Оп = или, !, мин( Предел, F, Предел1);

Оп = и, Предел1 is Предел - F).

мин( А, В, А) :- А < В, !.

мин( А, В, В).

Рис. 13. 12. Программа поиска с предпочтением в И / ИЛИ-графе.

Еще одна процедура

собрать( ОстДер, НовДер, ЕстьРеш1, НовДеревья, ЕстьРеш)

связывает между собой несколько объектов, с которыми работает расширспис. НовДер- это расширенное дерево, взятое из списка деревьев процедуры расширспис, ОстДер- остальные, не измененные деревья из этого списка, а ЕстьРеш1указывает на "решающий статус" дерева НовДер. Процедура собратьимеет дело с несколькими случаями в зависимости от значения ЕстьРеш1, а также от того, является ли список деревьев И-списком или ИЛИ-списком. Например, предложение

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Prolog»

Представляем Вашему вниманию похожие книги на «Prolog» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Prolog»

Обсуждение, отзывы о книге «Prolog» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x