Znalostní technologie I.
 Rozcestnik                   Pár slov ...                   Znalostní technologie II.                   Znalostní technologie III.                   Znalostní technologie IV.                   Další zdroje                  
Dnes je:        Aktuální čas: 00:00       Moudra: 

Pokračování LEKCE 2.

Píšeme první program v Clipsu


Obecný popis problému (velmi zjednodušeně):

Inferenční mechanismus si uvědomí, která všechna fakta vyhovují dané podmínce (tedy co vše lze dosadit za proměnnou ?nejaka).

(defrule vypis_vsechny_skupiny
   (skupina ?nejaka)

Můžete si představit, že si inf. mech. vytvoří jakýsi seznam tvrzení, které podmínkové části pravidla vyhovují.

Imaginární seznam: (tedy podmínkové části pravidla vyhovují tato fakta)

   (skupina A)
   (skupina B)
   (skupina 0)
   (skupina AB).

Na základě toho si inf. mech. vytvoří množinu aktivovaných pravidel, těch jejichž podmínková část je splněna (to platí pro naše 4 fakty). Tato aktivovaná pravidla přidá do okna Agenda. Pak vybere první fakt z našeho imaginárního seznamu (např. skupina A) a pro něj vykoná usuzovací část pravidla. Dané pravidlo z Agendy zmizí. Dále vezme druhý fakt z imaginárního seznamu (skupina B) a i pro něj vykoná usuzovací část pravidla. A tak to jde do té doby, dokud se Agenda nevyprázdní - tedy již nebude moci být vykonáno žádné pravidlo. Záleží ovšem na strategii inf. mech., v jakém pořadí budou pravidla vykonávána. V našem případě, je zde zatím jen jedno pravidlo.

Jak zhruba postupuje infer. mech. při zpracovávání programu

3/ Evidujte různé osoby a jejich krevní skupiny

Je nutné přidat do naší báze faktů informace o osobách a jejich krevních skupinách.

(deffacts osoby_a_krev
  (osoba Jan 0)
  (osoba Eva B)
  (osoba Karel B)
  (osoba Alzbeta 0)
)


4/ Vypište všechny osoby jejichž krev známe

(defrule vypis_zname_osoby
  (osoba ?osobax ?krev)
=>   (printout t "Osoba:" ?osobax " " "ma krev:" ?krev crlf)
)

Co pravidlo znamená ?

Za podmínky, že je evidována v bázi faktů nějaká osoba (?osobax) s určitou krví (?krev) pak tuto osobu (viz. usuzovací část pravidla) (?osobax) s její krví (?krev) vypiš. (POZOR na stejné názvy proměnných a stejný název relace osoba - tak jak je to uvedeno v bázi faktů - ve struktuře deffacts).

5/ Vypište jen ty osoby, které mají krev B

Podoba pravidla pro výpis osob jen s krví B

Za podmínky, že existuje nějaká taková osoba (?nejakaosoba) s krví B, "pak" ji vypiš.

Můžete si představit, že slovíčko "pak" je vlastně oddělovač obou částí pravidla =>. Všimněte si, že v programu v jednom pravidle užíváme název proměnné pro osobu: ?osobax a v jiném pravidle ?nejakaosoba. To je možné. Můžete používat různé názvy proměnných v různých pravidlech, ale v jednom pravidle musí být název proměnné v podmínkové části pro tu danou konkrétní proměnnou stejný jako v usuzovací části.

6/ Vypište jen ty osoby, které mají krev AB, v případě, že taková krev není evidována, tento případ ošetřete.

(defrule jen_osoba_s_AB
  (osoba ?nejakaosubka AB)
=>
  (printout t "Krevni skupinu AB ma:" ?nejakaosubka crlf)
)


Řešení je skoro stejné jako v úloze 5.

Ošetření:

(defrule osoba_s_AB_neni_evidovana
  (not(osoba ?nejaka AB))
=>
  (printout t "Zadna osoba s krvi AB neni v bazi definovana !!!" crlf)
)

V případě, že byste situaci neošetřili. Nic by se nestalo, ale je lepší dát uživateli vědět, že nic nebylo nalezeno. Představte, že byste měli jakési menu a z něj volili výpis všech osob s krevní skupinou AB, ale uživateli by se opět zobrazilo menu aniž by něco zjistil.

Využíváme zde podmínku s not. Jednoduše tím říkáme: za podmínky, že v bázi faktů neexistuje (to je to not) nějaká osoba s krevní skupinou AB, pak dejte uživateli vědět, že žádná taková osoba není v bázi definována. Not vlastně obalí celý výraz (osoba ?nejaka AB).



<== Zpět       ^ Nahoru ^       Pokračování ==>


Validace

Valid XHTML 1.0 Strict

Valid CSS!

Monitoring webu