Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_СИИ.doc
Скачиваний:
30
Добавлен:
09.11.2019
Размер:
917.5 Кб
Скачать

Лабораторная работа n 1 основы языка программирования пролог. Изучение среды turbo prolog.

Цель работы :

изучить принципы работы в среде TURBO PROLOG 2.0, основные понятия языка Турбо Пролог, и получить практический навык их использования.

Запустить Turbo Prolog

1.1 Основные понятия языка Турбо Пролог.

Пролог – декларативный язык. Вместо четкого алгоритма, указывающего компьютеру на то, как работать, чтобы решить задачу, программа на Прологе состоит из описания задачи.

Программа на языке Пролог, ее иногда называют базой знаний, состоит из предложений (или утверждений ), каждое предложение заканчивается точкой.

1.1.2. Факты

Одним из видов предложений являются факты.

Факт представляет собой, безусловно истинное утверждение и определяет отношение (в Прологе, как и в математической логике отношения принято называть предикатами ) между термами.

Факт является простым предикатом, который записывается в виде функционального терма.

Пример 1. Информацию о том, что Мария приходится матерью Анне, а Иван ее отцом на Прологе запишется в виде следующих двух фактов:

Мать (Мария, Анна).

Отец (Иван, Анна).

Точка, стоящая после предиката, указывает на то, что рассматриваемое выражение является фактом.

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

Соответственно, приведенный выше пример факта можно записать в Турбо Прологе, например так:

mother (“Мария”, “Анна”).

father (“Иван”, “Анна”).

Некоторые предикаты уже известны системе, они называются стандартными или встроенными.

В Турбо Прологе предложения с одним и тем же предикатом в заголовке должны идти одно за другим. Такая совокупность предложений называется процедурой.

1.1. 3 . Запросы

Специфическим видом предложений Пролога можно считать запросы.

Запросы используют для выяснения выполнимости некоторого отношения между описанными в программе объектами. Система рассматривает запрос как цель, к которой надо стремиться. Ответ на запрос может оказаться положительным или отрицательным, в зависимости от того, может ли быть достигнута соответствующая цель.

Программа на Прологе может содержать запрос в программе (так называемая внутренняя цель). Если программа содержит внутреннюю цель, то после запуска программы на выполнение система проверяет достижимость заданной цели.

Если внутренней цели в программе нет, то после запуска программы система выдает приглашение вводить запросы в диалоговом режиме (внешняя цель). Программа, компилируемая в исполняемый файл, обязательно должна иметь внутреннюю цель.

Если цель достигнута, система отвечает, что у нее есть информация, позволяющая сделать вывод об истинности запроса ("Yes"). При этом если в запросе содержатся переменные, то система либо выдает их значения, приводящие к решению, если решение существует, либо сообщает, что решений нет ("No solution"). Если достичь цели не удалось, система ответит, что у нее нет положительного ответа ("No").

Следует заметить, что ответ "No" на запрос не всегда означает, что отношение, о котором был задан запрос, не выполняется. Система может дать такой ответ и в том случае, когда у нее просто нет информации, позволяющей положительно ответить на запрос.

Пример 2. Требуется узнать, является ли Иван отцом Анны.

В среде Турбо Пролог это запишется следующим образом:

father (“Иван”, “Анна”).

После обработки данного запроса система выдаст сообщение Yes.

Если изменить запрос следующим образом

father (“Иван”, “Мария”).

То система выведет No т.к. в заданной базе знаний нет фактов соответствующих данному запросу.

Для вывода списка имен детей Марии, необходимо использовать переменную, которая по правилам Turbo Prolog должна быть заглавной латинской буквой, например X.

mother (“Мария”, X ).

Переменные могут быть свободными или связанными.

Свободная переменная - это переменная, которая еще не получила значения. Такие переменные называют неконкретизированными.

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

Областью действия переменной в Прологе является одно предложение. В разных предложениях может использоваться одно имя переменной для обозначения разных объектов. Исключением из правила определения области действия является анонимная переменная, которая обозначается символом подчеркивания "_". Анонимная переменная применяется в случае, когда значение переменной не важно. Каждая анонимная переменная - это отдельный объект.

В нашем случае, система сопоставит запрос с первым фактом , конкретизирует переменную X значением " Анна " и выдаст ответ:

X= Анна

1 Solution

Чтобы узнать, кто приходится отцом Анны используется запрос

father ( X , “Анна”)

Получим

X =Иван

1 Solution

Можно попросить систему найти имена всех известных ей мам и дочек, задав запрос:

mother ( X , Y ).

Система последовательно будет пытаться согласовывать запрос с имеющимися в программе предложениями от первого до последнего. В случае успешной унификации соответствующих термов переменная X будет означена именем матери, а переменная Y - именем ее дочери.

В итоге получим ответ:

X=Мария Y=Анна

1 Solution

Если надо получить только имена всех мам, можно воспользоваться анонимной переменной и записать запрос:

mother (X,_).

Получим ответ:

X=Мария

1 solution

Если же надо получить имена всех детей, информация о матерях которых есть в базе знаний, то запрос будет следующий:

mother (_, X ).

Получим ответ:

X=Анна

1 solution

И, наконец, если надо получить ответ на запрос: есть ли информация о людях, находящихся в отношении "мать - дочь", то его можно сформулировать в виде:

mother (_,_).

В данном случае нам не важны конкретные имена, а интересует, есть ли в нашей базе знаний хотя бы один соответствующий факт. Ответом в данном случае будет просто "Yes". Система сообщит о том, что у нее есть информация об объектах, связанных отношением "мать".

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]