Назад | Содержание| Вперёд Посвящается Бранке, Андрею и Тадею/i...

Назад | Содержание| Вперёд

Посвящается Бранке, Андрею и Тадею

ПРЕДИСЛОВИЕ АВТОРА

Язык программирования Пролог базируется наограниченном наборе механизмов, включающих всебя сопоставление образцов, древовидноепредставление структур данных и автоматическийвозврат. Этот небольшой набор образуетудивительно мощный и гибкий программный аппарат.Пролог особенно хорошо приспособлен для решениязадач, в которых фигурируют объекты (в частности,структуры) и отношения между ними. Например, вкачестве легкого упражнения, можно попробоватьвыразить на Прологе пространственные отношениямежду объектами, изображенными на обложке этойкниги. Пример такого отношения: верхний шаррасположен дальше, чем левый шар. Нетрудно такжесформулировать и более общее положение в видеследующего правила: если X ближе к наблюдателю,чем Y, a Y - ближе, чем Z, то объект X находится ближе,чем Z. Пользуясь правилами и фактами,пролог-система может проводить рассужденияотносительно имеющихся пространственныхотношений и, в частности, проверить, насколькоони согласуются с вышеуказанным общим правилом.Все эти возможности придают Прологу чертымощного языка для решения задач искусственногоинтеллекта, а также любых задач, требующихнечислового программирования.

Само название Пролог есть сокращение,означающее программирование в терминах логики.Идея использовать логику в качестве языкапрограммирования возникла впервые в начале 70-хгодов. Первыми исследователями,разрабатывавшими эту идею, были РобертКовальский из Эдинбурга (теоретические аспекты),Маартен ван Эмден из Эдинбурга(экспериментальная демонстрационная система) иАлен Колмероэ из Марселя (реализация).Сегодняшней своей популярности Пролог во многомобязан эффективной реализации этого языка,полученной в Эдинбурге Дэвидом Уорреном всередине 70-х годов.

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

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

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

Среди различных диалектов Пролога наиболеешироко распространен так называемыйэдинбургский синтаксис (или синтаксис DEC-10),который мы я принимаем в данной книге. Для того,чтобы обеспечить совместимость с различнымиреализациями Пролога, мы используем в книгесравнительно небольшое подмножество встроенныхсредств, имеющихся во многих вариантах Пролога.

Как читать эту книгу? В первой части порядокчтения естественным образом совпадает спорядком изложения, принятым в книге. Впрочем,часть разд. 2.4, в которой дается более формальноеописание процедурной семантики Пролога, можноопустить. В главе 4 приводятся примеры программ,которые можно читать только выборочно. Втораячасть книги допускает более гибкий порядокчтения, поскольку различные главы этой частипредполагаются взаимно независимыми. Однаконекоторые из тем было бы естественным прочестьраньше других - это относится к основнымпонятиям, связанным со структурами данных (гл. 9),и к базовым стратегиям поиска (гл. 11 и 13). Вприведенной ниже диаграмме показана наиболееестественная последовательность чтения глав.

Существует целый ряд исторически сложившихся ипротиворечащих друг другу взглядов на Пролог.Пролог быстро завоевал популярность в Европе какпрактический инструмент программирования. ВЯпонии Пролог оказался в центре разработкикомпьютеров пятого поколения. С другой стороны, всвязи с определенными историческими факторами, вСША Пролог получил признание несколько позднее.Один из этих факторов был связан спредварительным знакомством с Микропленнером,языком, близким к логическому программированию,но реализованным не эффективно. Этототрицательный опыт, относящийся к Микропленнеру,был неоправданно распространен и на Пролог, нопозднее, после появления эффективной реализации,предложенной Дэвидом Уорреном, этопредубеждение было убедительно снято.Определенная сдержанность по отношению кПрологу объяснялась также существованием"ортодоксальной школы" логическогопрограммирования, сторонники которой настаивалина использовании чистой логики, не запятнаннойдобавлением практически полезных внелогическихсредств. Практикам в области применения Прологаудалось изменить эту бескомпромиссную позицию ипринять более прагматический подход,позволивший удачно сочетать декларативныйпринцип с традиционным - процедурным. И наконец,третьим фактором, приведшим к задержке признанияПролога, явилось то обстоятельство, что в США втечение долгого времени Лисп не имел серьезныхконкурентов среди языков искусственногоинтеллекта. Понятно поэтому, что висследовательских центрах с сильнымилисповскими традициями возникало естественноепротиводействие Прологу. Но со временемсоперничество между Прологом и Лиспом потерялосвою остроту, и в настоящее время многие считают,что оптимальный подход состоит в сочетании идей,лежащих в основе этих двух языков.

Благодарности

Интерес к Прологу впервые возник у меня подвлиянием Дональда Мики. Я благодарен такжеЛоренсу Берду, Фернандо Перейра и Дэвиду Г.Уоррену, входившим в свое время в эдинбургскуюгруппу разработчиков Пролога, за их советы посоставлению программ и многочисленныедискуссии. Чрезвычайно полезными были замечанияи предложения, высказанные Эндрью Макгеттриком иПатриком Уинстоном. Среди прочитавших рукописькниги и сделавших ценные замечания были такжеИгорь Кононенко, Таня Маярон, Игорь Мозетик,Тимоти Ниблетт и Фрэнк Зердин. Мне бы хотелосьтакже поблагодарить Дебру Майсон-Этерингтон иСаймона Пламтри из издательства Эддисон-Уэсли затруд, вложенный в издание этой книги. И наконец,эта книга не могла бы появиться на свет безстимулирующего влияния творческой деятельностивсего международного сообщества специалистов пологическому программированию.

Иван Братко

Институт Тьюринга, Глазго

Январь 1986

Назад | Содержание| Вперёд









Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх