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

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

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

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

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

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

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

ПОЛНЫЙ_КОЛЛЕГА (ЛИЦ01 , ЛИЦ02 , ПРЕДМЕТ ОБЩЕЙ_ДЕЯTEJIЬHOCTИ),

которое на Прологе будет описано предикатом all_colleague, структура которого будет полностью аналогична структуре предиката unite, а определить его можно в виде процедуры, содержащей три декларации предиката all_colleague.

predicates

all_colleague( name , name, object ) clauses all_colleague(X,Y,Z) :- colleague(X,Y), Z=labour. all_colleague(X,Y,Z) :- unite(X,Y,Z). all_colleague(X,Y.Z) :- unite(Y,X,Z).

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

Для любых двух лиц X и Y и любой общей деятельности Z

X и Y являются коллегами по общей деятельности Z

ЕСЛИ

X и Y являются сослуживцами

И

общая их деятельность Z - это труд

ИЛИ

X объединяет с Y общая деятельность Z

ИЛИ

Y объединяет с X общая деятельность Z

Последнее правило устраняет асимметрию отношения unite no отношению к лицам, объединенным общей деятельностью. Действительно, если Козлов является коллегой Сидорова по работе, то, очевидно, что и Сидоров является кометой Козлова по работе.

Задача 2.

Измените программу, добавив в нее описание предиката all_colleague и процедуру для его определения.

  1. Определите состав явных и неявных баз, используемых в данной программе и опишите их структуру.

  2. Введите запрос "Кто является коллегой Тома?". Третье правило процедуры заключите в /*...*/ и повторите запрос. Объясните, почему разные ответы.

  3. В чем заключается разница в выполнении запросов unite("Петров",Who,X) и all_colleague("Петров",Who,Х). Введите еще ряд произвольных запросов.

  4. Определите, кто является коллегой Козлова и кто - коллега Сидорова.

  5. Все вопросы, запросы и результаты вывода привести в отчете.