- •Лабораторная работа № 3 Программирование интеллектуальных систем на языке Пролог Знакомство с языком Пролог
- •Введение
- •Элементы языка Турбо-Пролог
- •Структура программ Турбо-Пролога
- •Секция domains Пролог-программы
- •Секция predicates
- •Секция clauses
- •Секция goal
- •Секция database
- •Оболочка системы Турбо-Пролог
- •Отладка и трассировка программ
- •Служебные предикаты Турбо-Пролога
- •Порядок выполнения лабораторной работы
Элементы языка Турбо-Пролог
Программа на Прологе состоит из множества предложений (фраз). Каждое предложение - это либо факт, либо правило. Факт - это утверждение о том, что соблюдается некоторое отношение. Он записывается как имя, за которым следует список аргументов, заключенный в скобки. Например:
likes(“Иван", "Марья").
Правило - это факт, истинное значение которого зависит от истинности других фактов. Например:
likes("Иван",X) if likes("Петр",X).
Аргументы предложений Пролог-программы называются термами, а саму Пролог-программу можно рассматривать как сеть отношений, существующих между термами. Каждый терм обозначает некоторый объект предметной области и записывается как последовательность литер, которые делятся на четыре категории: прописные буквы, строчные буквы, цифры и спецзнаки. Существует три типа термов: константа, переменная или структура (составной терм).
Константами являются поименованные конкретные объекты или конкретные отношения. Существует два вида констант - атомы и числа. Атом - это либо последовательность латинских букв, цифр и знака подчеркивания, начинающаяся со строчной латинской буквы, либо произвольная группа символов, заключенная в кавычки (апострофы). Например: ivan, “Ivan", invoice_n, "иван", "n_счета", ''Иван".
Переменная в Прологе должна иметь имя, начинающееся с прописной буквы или знака подчеркивания. Например: Name, X, Invoice_n. Переменная называется связанной если имеется объект, который она обозначает. При отсутствии такого объекта переменная называется свободной. Для обозначения переменной, на которую отсутствует ссылка в программе, используется анонимная переменная - одиночный знак подчеркивания (_).
Структура (или составной терм) - объект, состоящий из совокупности других объектов, которые называются компонентами. Структура записывается на Турбо-Прологе с помощью указания се функтора и компонент. Компоненты заключаются в круглые скобки и разделяются запятыми. Функтор записывается перед скобками. Компоненты сами являются термами. Например, в факт likes входит структура book:
likes ( "Иван" , book ( "название", "автор" ) )
Составные термы аналогичны записям Паскаля или структурам Си, то есть - это определяемые программистом объекты произвольной сложности. По этой же аналогии - функтор и количество компонентов составного терма показывают тип записи, а компоненты составного терма соответствуют полям записи.
Структура программ Турбо-Пролога
Существует множество реализации языка Пролог для разных классов вычислительных систем. Нами за основу принимается программный продукт компании Borland International 'Турбо-Пролог" для IBM-совместимых компьютеров. Программа на Турбо-Прологе состоит из нескольких секций, каждая из которых идентифицируется ключевым словом и имеет следующую обобщенную структуру:
domains
/* секция объявления доменов */
database
/* секция объявления динамических баз данных */
predicates
/* секция объявления предикатов */
goal
/* подцель_1, подцель_2, и т. д. */
clauses
/* предложения (факты и правила) */
Обязательным в программе является присутствие двух секций с именами predicates и clauses. В первой из них описываются структуры используемых в программе отношений, а во второй эти отношения определяются. Для набора фактов и правил, рассмотренных выше, один из возможных примеров программы на Турбо-Прологе будет иметь вид:
/* программа 1 */
-
predicates
likes(string,string)
clauses
likes ("Иван","Марья"). likes ("Петр","пиво"). likes ("Иван",X) if likes ("Петр",X).
/* описание предиката */
/* факт */ /* факт */ /* правило */
В программе предикат likes описывает структуру отношения, домены которого имеют тип строки символов. Факты и правила записаны в виде предложении Пролог-программы. Обратите внимание, что каждое из предложений в секции clauses заканчивается точкой, а текст заключенный в /* ... */ - это комментарии. Отсутствие в программе секции goal предполагает, что запросы к программе будут осуществляться из оболочки Турбо-Пролога. Так, например, при запросе о поиске всех любителей пива, цель должна быть сформировала в окне диалога Турбо-Пролога в виде:
Goal: likes(Who,"пиво").
В ответ на этот запрос в том же окне диалога Турбо-Пролог выведет всех тех, кто любит пиво, связывая их с переменной Who.
Однако использование в Пролог-программах только двух секций, т.е. predicates и clauses, является достаточным только для простейших программ, которые не используют описание данных и их структур, не работают с динамическими базами данных. Рассмотрим более подробно назначение каждой из секций программы.