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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

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

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

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

решить( Верш) :-

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

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

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

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

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

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

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

Здесь принадлежит- обычное отношение принадлежности к списку.

Эта программа все еще имеет недостатки:

она не порождает решающее дерево, и

она может зацикливаться, если И / ИЛИ-граф имеет соответствующую структуру (циклы).

Программу нетрудно изменить с тем, чтобы она порождала решающее дерево. Необходимо так подправить отношение решить, чтобы оно имело два аргумента:

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

Решающее дерево представим следующим образом. Мы имеем три случая:

(1) Если Верш- целевая вершина, то соответствующее решающее дерево и есть сама эта вершина.

(2) Если Верш- ИЛИ-вершина, то решающее дерево имеет вид

Верш ---> Поддерево

где Поддерево- это решающее дерево для одного из преемников вершины Верш.

(3) Если Верш- И-вершина, то решающее дерево имеет вид

Верш ---> и : Поддеревья

где Поддеревья- список решающих деревьев для всех преемников вершины Верш.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

H1 is H + 7,

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

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

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

отобр( Д, Н).

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

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

отобр( Д, Н),

tab( H),

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

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

write( Верш), nl.

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

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

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

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

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

а ---> b ---> и : [d, c ---> h]

Три формы представления решающего дерева соответствуют трем предложениям отношения решить. Поэтому все, что нам нужно сделать для изменения нашей исходной программы решить, - это подправить каждое из этих трех предложений, просто добавив в каждое из них решающее дерево в качестве второго аргумента. Измененная программа показана на рис. 13.8. В нее также введена дополнительная процедура отобрдля отображения решающих деревьев в текстовой форме. Например, решающее дерево рис. 13.4 будет отпечатано процедурой отобрв следующем виде:

а ---> b ---> d

е ---> h

Программа рис. 13.8 все еще сохраняет склонность к вхождению в бесконечные циклы. Один из простых способов избежать бесконечных циклов - это следить за текущей глубиной поиска и не давать программе заходить за пределы некоторого ограничения по глубине. Это можно сделать, введя в отношение решитьеще один аргумент:

решить( Верш, РешДер, МаксГлуб)

Как и раньше, вершиной Вершпредставлена решаемая задача, а РешДер- это решение этой задачи, имеющее глубину, не превосходящую МаксГлуб. МаксГлуб-это допустимая глубина поиска в графе. Если МаксГлуб= 0, то двигаться дальше запрещено, если же МаксГлуб> 0, то поиск распространяется на преемников вершины Верш, причем для них устанавливается меньший предел по глубине, равный МаксГлуб-1. Это дополнение легко ввести в программу рис. 13.8. Например, второе предложение процедуры решить примет вид:

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

Интервал:

Закладка:

Сделать

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

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


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

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

x