ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ И ЯЗЫК ПРОЛОГ

Теоретические положения математической логики и теории алгоритмов широко используются на практике. Особое значение эти дисциплины имеют для развития языков программирования. Хорошо известно, что принципы алгоритмизации, изучаемые в теории алгоритмов, лежат в основе семантики языков процедурного программирования, к которым относятся такие популярные языки, как Си, C++, Паскаль и Бейсик. Менее известные, но широко применяемые в области создания приложений для систем искусственного интеллекта, — языки логического программирования. Один из наиболее популярных языков этой группы — язык Пролог — полностью основывается на теоретических положениях логики предикатов первого порядка. Рассмотрим подробнее особенности программирования на этом языке.

Основная идея логического программирования и история создания языка Пролог

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

Для конкретного применения логической программы необходимо задать ей цель, пытаясь удовлетворить которую, она сама построит цепочку решения. Простейший пример формулирования цели: каково значение функции (заданной программой) при заданном значении аргумента? По своей семантике понятие цели близко к понятию «запрос» в базах данных. Вычисление ответа на запрос соответствует доказательству существования такого объекта (ответа); в процессе вычисления этот объект строится. Правила, по которым проводятся вычисления, образуют процедурную (или операционную) семантику логических программ. Существование этой семантики и определяет последовательность действий аналогично традиционному представлению программы.

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

Название Пролог произошло от словосочетания «программирование с помощью логики» (PROgramming in LOGic). Первая версия его была разработана и реализована в 1973 г. группой сотрудников Марсельского университета (Франция) под руководством Алэна Колме- рое, занимавшихся задачей перевода с естественного языка. Первое время, в начале 1970-х, Пролог был не очень популярен, до появления первой удачной версии компилятора Дэвида Уоррена для компьютера DEC-10 в Эдинбурге, ставшей своего рода стандартом этого языка. После появления эдинбургской версии на Прологе были успешно реализованы различные проекты, которые затруднительно было выполнить средствами традиционных процедурных языков. Был решен ряд прикладных задач из области молекулярной биологии, проектирования сверхбольших интегральных схем и т. п. Особенно хорошо зарекомендовал себя Пролог в области создания экспертных систем.

Язык имеет строгое математическое обоснование и ориентирован на использование концепций и методов логики предикатов первого порядка. На сегодняшний день язык Пролог является живым и активно развивающимся, хотя и не имеет такого широкого распространения, как языки Pascal, C++ и созданные на их основе интегрированные среды разработки Delphi, Visual C++, C++ Builder. Объясняется это тем, что перечисленные языки создавались как языки широкого назначения, поэтому в силу своей универсальности они применимы для решения задач практически в любой области. Пролог же создавался в первую очередь как специализированный язык, предназначенный для решения задач, относящихся к области искусственного интеллекта. Именно в этой области в полной мере проявляются все его достоинства и преимущества перед языками широкого назначения.

В настоящее время существует множество реализаций этого языка, наиболее популярные из которых: SWI-Prolog, Arity Prolog, Delphina Prolog, LPA-Prolog и т. д. Из всех существующих версий Пролога в России наиболее популярной оказалась версия, реализованная для IBM-совместимых компьютеров датской компанией Prolog Development Center (PDC) в содружестве с фирмой Borland International. Первая версия этого варианта реализации появилась в 1986 г. и носила название Турбо Пролог. При создании версии были допущены серьезные отступления от принятого стандарта языка. Это была плата за возможность ускорить трансляцию и выполнение программ. Новый компилятор был по достоинству оценен программистами, хотя и вызвал критику за существенные отступления от изначальной модели, его даже часто называли «не совсем чистым Прологом». Фирма Borland распространяла эту версию до 1990 г., а затем компания PDC приобрела все права на использование исходных текстов компилятора и дальнейшее продвижение системы программирования на рынок происходило под названием PDC Prolog. Система постоянно развивалась, и на ее базе в 1996 г. была создана первая версия интегрированной среды разработки под названием Visual Prolog. Интересно отметить, что в ее разработке принимали участие и российские программисты.

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

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ   След >