- •Лабораторная работа № 5 Программирование интеллектуальных систем на языке Пролог Пролог-программы как простейшие базы данных и знаний
- •Введение
- •Запросы к базе данных
- •2.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 и процедуру для его определения.
Определите состав явных и неявных баз, используемых в данной программе и опишите их структуру.
Введите запрос "Кто является коллегой Тома?". Третье правило процедуры заключите в /*...*/ и повторите запрос. Объясните, почему разные ответы.
В чем заключается разница в выполнении запросов unite("Петров",Who,X) и all_colleague("Петров",Who,Х). Введите еще ряд произвольных запросов.
Определите, кто является коллегой Козлова и кто - коллега Сидорова.
Все вопросы, запросы и результаты вывода привести в отчете.