Файл: Лабораторная работа Построение баз знаний на языке clips. Факты, правила и шаблоны.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 02.12.2023

Просмотров: 16

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Лабораторная работа 3. Построение баз знаний на языке CLIPS. Факты, правила и шаблоны.
1. Создание шаблонов

Создание шаблонов фактов и правил осуществляется с помощью конструктора deftemplate:
(deftemplate <имя объекта>

(slot <имя слота 1>)

(slot <имя слота 2>)

……………………

(slot <имя слота n>)

)
Как и все конструкторы в языке CLIPS, конструктор шаблонов не возвращает никакого значения. Создадим два шаблона для фактов person и parent:

(deftemplate person

(slot name)

(slot gender)

(slot age)

)

где name – имя,

gender – пол,

age – возраст.
(deftemplate tparent

(slot parentname)

(slot childname)

)

где parentname – имя родителя,

childname – имя ребенка.

На основе шаблона факта можно список фактов с помощью конструктора фактов deffacts:
(deffacts <имя списка фактов>

(<имя_шаблона_факта 1 > (<имя_слота 1> <значение_слота 1>)

(<имя_слота 2> <значение_слота 2>)

……….

(<имя_слота n> <значение_слота n>))

……..

(<имя_шаблона_факта m> (<имя_слота 1> <значение_слота 1>)

(<имя_слота 2> <значение_слота 2>)

……….

(<имя_слота n> <значение_слота n>))

)

С помощью ранее созданных шаблонов создадим списки фактов для базы данных «Родственники» (генеалогическое дерево, см. рис. 1).


Рис. 1
(deffacts fperson

(person (name Vasilii) (gender male) (age 65))

(person (name Liza) (gender female) (age 62))

(person (name Vladimir) (gender male) (age 42))

(person (name Victor) (gender male) (age 40))

(person (name Natasha) (gender female) (age 37))

(person (name Oleg) (gender male) (age 18))

(person (name Olga) (gender female) (age 14))

(person (name Mihail) (gender male) (age 41))

(person (name Kostia) (gender male) (age 10))

(person (name Masha) (gender male) (age 12))

)
(deffacts fparent

(tparent (parentname Vasilii) (childname Vladimir))

(tparent (parentname Vasilii) (childname Victor))

(tparent (parentname Vasilii) (childname Natasha))

(tparent (parentname Liza) (childname Vladimir))

(tparent (parentname Liza) (childname Victor))

(tparent (parentname Liza) (childname Natasha))

(tparent (parentname Vladimir) (childname Oleg))

(tparent (parentname Victor) (childname Olga))

(tparent (parentname Natasha) (childname Kostia))

(tparent (parentname Natasha) (childname Masha))

(tparent (parentname Mihail) (childname Kostia))

(tparent (parentname Mihail) (childname Masha))

)
Создадим шаблон нового правила, описывающего отношение “X является отцом Y“:
(deftemplate Father

(slot name1)

(slot name2)

)

По этому шаблону создадим правило:
(defrule father

(person (name ?x) (gender male))

(person (name ?y))

(tparent (parentname ?x) (childname ?y))

=>

(printout t ?x " is father of " ?y crlf)

(assert (Father (name1 ?x) (name2 ?y)))

)

Для того, чтобы проверить работу правила, необходимо загрузить созданные шаблоны фактов и правила, загрузить списки фактов, затем в главном меню выбрать пункт Execution (Выполнение) и последовательно выполнить команды reset и run. Результаты будут выданы на экран (рис. 2).

Факты, созданные во время данного сеанса работы с системой CLIPS, можно просмотреть в окне фактов, вызвав в пункте Windows главного меню команду Facts Window (см. рис. 3). Кроме того созданные факты можно сохранить в текстовом файле с помощью команды

(save-facts <имя файла>), см. рис. 4.



Рис.2 Главное окно системы CLIPS.

Рис. 3. Окно фактов, созданных в системе.


Рис.4. Сохранение списка фактов.
В данном сеансе сохраненный список фактов будет содержать следующие факты:
(initial-fact)

(person (name Vasilii) (gender male) (age 65))

(person (name Liza) (gender female) (age 62))

(person (name Vladimir) (gender male) (age 42))

(person (name Victor) (gender male) (age 40))

(person (name Natasha) (gender female) (age 37))

(person (name Oleg) (gender male) (age 18))

(person (name Olga) (gender female) (age 14))

(person (name Mihail) (gender male) (age 41))

(person (name Kostia) (gender male) (age 10))


(person (name Masha) (gender male) (age 12))

(tparent (parentname Vasilii) (childname Vladimir))

(tparent (parentname Vasilii) (childname Victor))

(tparent (parentname Vasilii) (childname Natasha))

(tparent (parentname Liza) (childname Vladimir))

(tparent (parentname Liza) (childname Victor))

(tparent (parentname Liza) (childname Natasha))

(tparent (parentname Vladimir) (childname Oleg))

(tparent (parentname Victor) (childname Olga))

(tparent (parentname Natasha) (childname Kostia))

(tparent (parentname Natasha) (childname Masha))

(tparent (parentname Mihail) (childname Kostia))

(tparent (parentname Mihail) (childname Masha))

(Father (name1 Mihail) (name2 Masha))

(Father (name1 Mihail) (name2 Kostia))

(Father (name1 Victor) (name2 Olga))

(Father (name1 Vladimir) (name2 Oleg))

(Father (name1 Vasilii) (name2 Natasha))

(Father (name1 Vasilii) (name2 Victor))

(Father (name1 Vasilii) (name2 Vladimir))
Задание.

Создайте шаблон и правило для отношений:

  1. X является мамой Y,

  2. X является братом Y,

  3. X является сыном Y,

  4. X является тётей Y.