Программисты понимают, что для решения задач, не позволяющих достичь высокого уровня формализации в виде вычислительных алгоритмов, приходится изобретать новые языки, на которых и пишутся программы для все более широкого класса задач искусственного интеллекта. Поэтому естественный интерес вызывают книги, посвященные как изучению языков для программирования задач искусственного интеллекта, так и собственно программированию подобных задач. Третье издание книги Ивана Братко предназначено тем, кто интересуется применением языка Пролог.
![](http://www.osp.ru/data/869/530/1234/074_1.jpg)
Первая часть книги содержит сведения (в объеме десяти глав) по языку Пролог. Здесь рассматриваются основные механизмы, используемые в представляемой концептуальной модели языка, и описываются различия между декларативными и процедурными значениями программы. Читателям, как заявляет автор, необходимы общие представления из области компьютерных наук, но знания по искусственному интеллекту необязательны. Не требуется и значительной подготовки по программированию, чтобы не препятствовать успешному усвоению иного способа мышления, свойственного представлениям искусственного интеллекта. Среди ряда диалектов Пролога наибольшее распространение получил эдинбургский синтаксис (синтаксис DEC-10), положенный в основу соответствующего стандарта ISO; именно его автор выбрал для представления иллюстративных материалов. Редактор перевода книги дает полезную для читателей информацию о выборе дистрибутива языка, о режимах работы интерпретатора и разработке с учетом декларативных и процедурных аспектов.
Вторая часть книги (еще двенадцать глав) посвящена применению Пролога в области искусственного интеллекта. Братко рассматривает проблему искусственного интеллекта в виде общей схемы, называемой пространством состояний, которая представляется в виде графа, в узлах которого размещены проблемные ситуации, а решение сводится к поиску пути на этом графе. В качестве основных стратегий решения проблем выступают поиск в глубину, итеративное углубление, а также поиск в ширину. Анализ основных методов читатель также может найти в книге.
К другим классам применений Пролога можно отнести логическое программирование в ограничениях, представление знаний и построение экспертных систем, планирование и обучение, индуктивное логическое программирование, качественные рассуждения, обработку лингвистической информации с использованием грамматических правил, а также способы ведения игры с полной информацией для двух участников, в частности ведения шахматного эндшпиля.
В заключительной главе рассмотрены возможности использования Пролога для метапрограммирования, когда программа принимает в качестве данных другие программы. В частности, описано, как создать интерпретаторы языка Пролог на нем самом с помощью специального метода компиляции программ путем обобщения на основе объяснения, разработанного в качестве одного из подходов к машинному обучению.
Комментируя отличия третьего издания книги, автор выделяет новые главы, посвященные программированию на основе логики ограничений, а также индуктивному и логическому программированию. Кроме того, интерес представляют темы, связанные с описанием байесовских сетей, используемых при представлении знаний и программ эвристического поиска по заданному критерию, отличающихся низкими требованиями к памяти.
Книга снабжена упражнениями и решениями части из них. Обширный список литературы несомненно удовлетворит как начинающего, так и продвинутого читателя.
Книга представляет собой хорошее современное пособие по предмету и непременно будет интересна читателям. Однако, изменение, внесенное при переводе английского слова programming в названии книги, представляется неубедительным. Во-первых, искусственный интеллект в целом в книге не обсуждается, а во-вторых, вряд ли стоило отсекать читателей, которые имеют намерение познакомиться лишь с языком Пролог, а в заглавии видят нечто иное.
И. Братко. Алгоритмы искусственного интеллекта на языке Prolog. М.: Вильямс, 2004. — 640 с.: ил.