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



Дата04.10.2022
өлшемі176 Kb.
#151535
түріЛабораторная работа
Байланысты:
ЛабРабота 8
Lab4 Volodin E V, 4 Пользовательские параметры, ТЗ Нестеров

Лабораторная работа 8. Построение баз знаний на языке 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 Vladimir) (gender male) (age 75))
(person (name Irina) (gender female) (age 74))
(person (name Olga) (gender female) (age 53))
(person (name Konstantin (gender male) (age 54))
(person (name Aleksey) (gender male) (age 56))
(person (name Natalia) (gender female) (age 55))
(person (name Vika) (gender female) (age 25))
(person (name Egor) (gender male) (age 29))
(person (name Daria) (gender female) (age 21))
(person (name Peter) (gender male) (age 24))
(person (name Dmitriy) (gender male) (age 30))
(person (name Ksenia) (gender female) (age 28))
(person (name Lena) (gender female) (age 6))
(person (name Ann) (gender female) (age 3))
(person (name Kate) (gender female) (age 8))
(person (name Vera) (gender female) (age 5))
(person (name Igor) (gender male) (age 5))
)

(deffacts fparent


(tparent (parentname Vladimir) (childname Olga))
(tparent (parentname Vladimir) (childname Aleksey))
(tparent (parentname Irina) (childname Olga))
(tparent (parentname Irina) (childname Aleksey))
(tparent (parentname Olga) (childname Egor))
(tparent (parentname Olga) (childname Natasha))
(tparent (parentname Konstantin) (childname Egor))
(tparent (parentname Konstantin) (childname Daria))
(tparent (parentname Aleksey) (childname Dmitriy))
(tparent (parentname Natalia) (childname Dmitriy))
(tparent (parentname Vika) (childname Lena))
(tparent (parentname Egor) (childname Lena))
(tparent (parentname Daria) (childname Ann))
(tparent (parentname Peter) (childname Ann))
(tparent (parentname Dmitriy) (childname Kate))
(tparent (parentname Dmitriy) (childname Vera))
(tparent (parentname Dmitriy) (childname Igor))
(tparent (parentname Ksenia) (childname Kate))
(tparent (parentname Ksenia) (childname Vera))
(tparent (parentname Ksenia) (childname Igor))
)

Создадим шаблон нового правила, описывающего отношение “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,

  5. X является дочкой Y,

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


Достарыңызбен бөлісу:




©www.engime.org 2024
әкімшілігінің қараңыз

    Басты бет