Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IIS / Печень О.А / Тема 2 / ЛР 2 1 - Prolog знакомство.doc
Скачиваний:
30
Добавлен:
31.03.2015
Размер:
204.8 Кб
Скачать
  1. Элементы языка Турбо-Пролог

Программа на Прологе состоит из множества предложений (фраз). Каждое предложение - это либо факт, либо правило. Факт - это утверждение о том, что соблюдается некоторое отношение. Он записывается как имя, за которым следует список аргументов, заключенный в скобки. Например:

likes(“Иван", "Марья").

Правило - это факт, истинное значение которого зависит от истинности других фактов. Например:

likes("Иван",X) if likes("Петр",X).

Аргументы предложений Пролог-программы называются термами, а саму Пролог-программу можно рассматривать как сеть отношений, существующих между термами. Каждый терм обозначает некоторый объект предметной области и записывается как последовательность литер, которые делятся на четыре категории: прописные буквы, строчные буквы, цифры и спецзнаки. Существует три типа термов: константа, переменная или структура (составной терм).

Константами являются поименованные конкретные объекты или конкретные отношения. Существует два вида констант - атомы и числа. Атом - это либо последовательность латинских букв, цифр и знака подчеркивания, начинающаяся со строчной латинской буквы, либо произвольная группа символов, заключенная в кавычки (апострофы). Например: ivan, “Ivan", invoice_n, "иван", "n_счета", ''Иван".

Переменная в Прологе должна иметь имя, начинающееся с прописной буквы или знака подчеркивания. Например: Name, X, Invoice_n. Переменная называется связанной если имеется объект, который она обозначает. При отсутствии такого объекта переменная называется свободной. Для обозначения переменной, на которую отсутствует ссылка в программе, используется анонимная переменная - одиночный знак подчеркивания (_).

Структура (или составной терм) - объект, состоящий из совокупности других объектов, которые называются компонентами. Структура записывается на Турбо-Прологе с помощью указания се функтора и компонент. Компоненты заключаются в круглые скобки и разделяются запятыми. Функтор записывается перед скобками. Компоненты сами являются термами. Например, в факт likes входит структура book:

likes ( "Иван" , book ( "название", "автор" ) )

Составные термы аналогичны записям Паскаля или структурам Си, то есть - это определяемые программистом объекты произвольной сложности. По этой же аналогии - функтор и количество компонентов составного терма показывают тип записи, а компоненты составного терма соответствуют полям записи.

  1. Структура программ Турбо-Пролога

 Существует множество реализации языка Пролог для разных классов вычислительных систем. Нами за основу принимается программный продукт компании 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, является достаточным только для простейших программ, которые не используют описание данных и их структур, не работают с динамическими базами данных. Рассмотрим более подробно назначение каждой из секций программы.