- •8. Языки и технологии программирования для искусственного интеллекта
- •8.1. Обзор языка prolog
- •8.2. Типы данных prolog
- •8.3. Структура программы на prolog
- •8.3.1. Раздел целей
- •8.3.2. Организация запросов на prolog
- •8.4. Ввод-вывод данных на prolog
- •8.5. Разветвления на prolog
- •8.6. Правила логического вывода
- •8.6.1. Понятие об унификации и конкретизации
- •8.6.2. Правило логического вывода на prolog
- •8.6.3. Задачи на упорядочение объектов
- •8.7. Рекурсия на prolog
- •8.7.1. Понятие рекурсии на prolog
- •8.7.2. Числовая рекурсия
- •8.7.3. Рекурсия в графике
- •8.8. Списки prolog. Рекурсивная обработка списков
- •8.8.1. Определение и структура списка
- •8.8.2. Рекурсивная обработка списков
- •8.9. Решение логических задач на prolog
- •8.9.1. Понятие о методе резолюций
- •8.10. Задачи, использующие структуру графа
8. Языки и технологии программирования для искусственного интеллекта
Языки программирования LISP и PROLOG чаще всего применяются для решения задач искусственного интеллекта. Их синтаксис и семантика дают богатый материал для рассуждения о задачах и их решениях. Во многом это определяется их мощностью, а также возможностью их рассмотрения как "средства мышления".
8.1. Обзор языка prolog
PROLOG – это наиболее известный пример языка логического программирования (logic programming language). Логическая программа – это набор спецификаций в рамках формальной логики. PROLOG основан на теории предикатов первого порядка. Само имя этого языка расшифровывается как Programming in Logic (Программирование в логике). При выполнении программы интерпретатор постоянно реализует вывод на основе логических спецификаций. Идея использования возможностей представления теории предикатов первого порядка – это одно из основных преимуществ применения языка PROLOG для компьютерных наук вообще, и компьютерного интеллекта в частности.
Развитие языка PROLOG уходит корнями в исследования, связанные с доказательством теорем, а точнее, с разработкой алгоритмов опровержения резолюции. Процедура доказательства, получившая название резолюции (resolution), стала основным методом вычислений на языке PROLOG. Частично метод резолюции описан в п. 2.2.3.
Благодаря этим свойствам PROLOG зарекомендовал себя в качестве полезного средства исследования таких экспериментальных вопросов программирования, как автоматическая генерация кода, верификация программ и разработка высокоуровневых языков программирования. PROLOG, как и другие основанные на логике языки, поддерживает декларативный (описательный) стиль программирования, то есть конструирование программ в терминах точного определения ситуации и точной формулировки задачи. В отличие от него процедурный язык программирования предполагает написание программы в виде последовательности инструкций по выполнению алгоритма. В логическом программировании компьютеру сообщается, "что есть истина", а не "как решить задачу". Это позволяет программисту сосредоточиться на решении задачи и создании описаний для предметной области, а не на деталях описания низкоуровневых алгоритмических конструкций вида "что делать далее".
Первая PROLOG-программа была написана в начале 1970 годов во Франции в рамках проекта по пониманию естественного языка [49]. Теоретические основы этого языка описаны в работах Р. Ковальски [49, 50]. Основной этап развития языка PROLOG приходится на 1975–1979 годы, когда на кафедре искусственного интеллекта университета Эдинбурга Дэвид Уоррен и Фернандо Перейра отвечали за реализацию этого языка. Они создали первый интерпретатор PROLOG. Описание этого кода и результаты сравнения PROLOG с языком LISP приводятся в книге Д. Варена [62]. Эта версия стала первым стандартом языка и была описана в книге У. Клоксина и М. Меллиша [38]. Русский перевод этой книги вышел в 1987 году [18].
В настоящее время наиболее популярна созданная в 1986 году система Turbo-Prolog, работающая под MS DOS, и система VISUAL-PROLOG под WINDOWS.