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