У Клоксин - ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ

Здесь есть возможность читать онлайн «У Клоксин - ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Книга английских специалистов, содержащая описание основ логического программирования и особенностей языка Пролог – базового языка ЭВМ пятого поколения. Области применения этого языка связаны с разработкой экспертных систем, интеллектуальных баз данных, обработкой естественного языка, разработкой компиляторов ЭВМ. Книга полезна для первого ознакомления с языком Пролог.

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

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

Интервал:

Закладка:

Сделать

Как мы можем убедиться в том, что граничные условия будут когда-либо удовлетворены? Для этого необходимо обратить внимание на то, как используется рекурсия во втором правиле для предиката принадлежит. Заметим, что каждый раз, когда при поиске соответствия для целевого предиката принадлежитпроисходит рекурсивное обращение к тому же предикату, новая цель формируется для более короткого списка. Хвост списка всегда является более коротким списком, чем исходный список. Очевидно, что рано или поздно произойдет одно из двух событий: либо произойдет сопоставление с первым правилом для принадлежит, либо в качестве второго аргумента принадлежитбудет задан список длины 0, т. е. пустой список. Как только возникнет одна из этих ситуаций, прекратится рекуррентное порождение целей для предиката принадлежит. Первое граничное условие распознается фактом, который не вызывает порождения новых подцелей. Второе граничное условие не распознается ни одним из утверждений для принадлежит, так что процесс поиска сопоставимого элемента списка для целевого утверждения принадлежит закончится неудачей. Это демонстрирует следующий пример на Прологе:

принадлежит(Х, [X | _]).

принадлежит(Х,[_|Y]):- принадлежит (X,Y).

?- принадлежит(d,[a,b,с,d,e,f,g]).

да

?- принадлежит(2,[3,a,4,f]).

нет

Предположим, мы введем вопрос

?- принадлежит(clugatе,[curraugh_tiр,music_star,раrk_mill, ortland]).

Так как clygateне сопоставимо с curragh_tip,то происходит сопоставление со вторым правилом для принадлежит.Переменная Y получает значение [music_star, park_mill, portland],и порождается следующая цель: определить, принадлежит ли clygateэтому списку. Опять происходит сопоставление со вторым правилом, и снова выделяется хвост списка. Текущей целью становится принадлежит (clugate,[park_mill,portland])Этот процесс рекурсивно повторяется до тех пор, пока мы не доберемся до цели, у которой Xесть clygate,a Yесть [portland].Происходит еще одно сопоставление со вторым правилом, и теперь Yконкретизируется хвостом списка [portland],который является пустым списком. Следующей целью становится принадлежит(clygate,[]).Ни одно из правил в базе данных не сопоставимо с этой целью, так что цель оказывается ложной и ответ на вопрос будет отрицательным.

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

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

родитель(X,Y):- ребенок(Y,X).

ребенок(A,B):- родитель(B,A).

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

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

человек(X):- человек(Y), мать(Х,Y).

человек(адам).

и ввели вопрос

?- человек(X).

то Пролог сначала использовал бы правило и рекурсивно породил подцель человек (Y).Попытка найти соответствие этой цели вновь привела бы к выбору первого правила и породила бы еще одну новую эквивалентную подцель. И так далее, до тех пор, пока не исчерпались бы вычислительные ресурсы. Конечно, если бы была возможность использовать механизм возврата, то был бы найден сообщенный в определении факт об Адаме и началось бы порождение решений [7] Это могло бы привести к успеху при соответствующем определении предиката мать . - Прим. ред. . Ошибка заключается в том, что для того, чтобы начался возврат, Пролог должен потерпеть неудачу при проверке первого утверждения. В данном же случае поиск решения оказывается неопределенно длинным, и нет никакой возможности завершить этот поиск с успехом либо с неудачей. Из всего сказанного выше можно извлечь следующую мораль:

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

Интервал:

Закладка:

Сделать

Похожие книги на «ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ»

Представляем Вашему вниманию похожие книги на «ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


libcat.ru: книга без обложки
Алексей Корепанов
Отзывы о книге «ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ»

Обсуждение, отзывы о книге «ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x