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 10.

Úloha k procvičení - Baktérie


Úloha k procvičení - Baktérie

Zadání:

Baktérie je možné klasifikovat pomocí několika charakteristik, jako je základní tvar (kulička, tyčinka, vlákno, spirála), výsledek laboratorního testu (pozitivní, negativní) a jestli potřebují ke svému přežití kyslík (aerobní=potřebují nebo anaerobní=nepotřebují). Napište program, který identifikuje bakterii na základě informací v níže uvedené tabulce. Program se uživatele zeptá na tvar, výsledek laboratorního testu a potřebnost kyslíku pro bakterii.

Typ Tvar Laboratorní test Nároky na kyslík
actinomyceta tyčinka NEBO vlákno pozitivní aerobní
kok kulička pozitivní aerobní A anaerobni
corynebakterie tyčinka pozitivní aerobní
endospora tyčinka pozitivní NEBO negativní aerobní A anaerobní
střební baktérie tyčinka negativní aerobní
plísňová bakterie kulička žádný aerobní
mycoplazma kulička žádný aerobní
pseudomonáda tyčinka negativní aerobní
rickettsia kulička NEBO tyčinka negativní aerobní
zapouzdřilka vlákno negativní aerobní
spirila spirála negativní aerobní
spirocheta> spirála negativní anaerobní
vibria tyčinka negativní aerobní

Poznámky

1. tvar: shoda ve tvaru mezi pozorovanou a některou konkrétní bakterií nastane tehdy, jestliže se všechny hodnoty tvaru pozorované bakterie nachází ve výčtu možných hodnot tvaru známé baktérie.

Uživatel zadá: (tycinka) - pak může jít o actinomycetu, corynebakterii, rickettsiu, endosporu atd.
Uživatel zadá: (tycinka vlakno) - pak může jít o actinomycetu, ale ne o corynebakterii (ta může nabývat jen tvaru tyčinka, ale ne vlákna !)

2. laboratorní test: výsledek laboratorního testu je vždy JEDNOZNAČNÝ, proto u pozorované baktérie nabývá vlastnost lab. test. vždy přávě jednu hodnotu (proto slot a ne multislot). Jedná se o podobné zacházení s hodnotami jako v případě tvaru. Výsledek lab. testu může být pozitivní nebo negativní (ale ne oba zároveň). Tedy shoda ve výsledku lab. testu nastane tehdy, jestliže (jediná !) hodnota výsledku lab. testu u pozorované baktérie se nachází ve výčtu možných hodnot této vlastnosti u některé konkrétní baktérie.

Uživatel zadá: (negativní) - pak může jít o endosporu, střevní baktérii, pseudomonádu atd.
Uživatel zadá: (pozitivní negativní) - pak může jít o endosporu, ale ne o koka či spirilu (ty mohou nabývat jen jedné hodnoty)

3. nároky na kyslík: tato vlastnost může nabývat více hodnot NAJEDNOU. Shoda nastane tehdy, jestliže hodnoty této vlastnosti u pozorované baktérie přesně odpovídají hodnotám této vlastnosti nějaké konkrétní baktérie (tj. žádná hodnota nechybí ani nepřebývá !)

Uživatel zadá: (aerobní) - pak může jít o actinomycetu, corynebakterii, ale ne o koka (ten může nabývat i hodnoty anaerobní)
Uživatel zadá: (aerobní anaerobní) - pak může jít o koka či endosporu, ale už ne o mycoplazmu atd.

Detail: Pravidlo vyhledej_bakterii

(defrule vyhledej_bakterii
   (hledana_bakterie (tvar $?tvarmuj) (lab_test ?testmuj) (kyslik $?kyslikmuj))
   (bakterie (nazev ?jmeno) (tvar $?t & :(subsetp $?tvarmuj $?t)) (lab_test $?lt & :(member$ ?testmuj $?lt))
(kyslik $?k & :(subsetp $?kyslikmuj $?k) & :(subsetp $?k $?kyslikmuj)))
=>
   (printout t "Vasim pozadavkum vyhovuje bakterie:" ?jmeno crlf))

1. podmínka: soubor požadavků uživatele
2. podmínka: to co uživatel požaduje je porovnáváno s bází faktů (s fakty o bakteriích)

Vysvětlení jednotlivých částí 2. podmínky

***(tvar $?t & :(subsetp $?tvarmuj $?t)) (lab_test $?lt & :(member$ ?testmuj $?lt))

Tato část druhé podmínky využívá příkazu jak subsetp tak member. Musíme se řídit tím, jestli je pro daný tvar možné definovat logickou spojku "NEBO" či "A". Ve sloupci pro tvar vidíme, že se jedná o spojku "NEBO". Tedy budeme vyhledávat seznam v seznamu (příkaz subsetp). Totéž platí i pro laboratorní test s tím rozdílem, že test je definován jako slot - kvůli jednoznačnosti lab. testů.

***(kyslik $?k & :(subsetp $?kyslikmuj $?k) & :(subsetp $?k $?kyslikmuj)

Část 2. podmínky, týkající se kyslíku, je složitější. Pro kyslík u některých baktérií platí logická spojka "A".

(kyslik $?k & :(subsetp $?kyslikmuj $?k): musíme také zajistit, aby se nám vyhledával seznam v seznamu.

Např. uživatel zadá: (aerobní) - pak má být vybrána např. baktérie actinomyceta (ta vybrána bude - to zajistíme právě touto částí podmínky).

Jak ale zajistit, aby nebyla vybrána např. baktérie kok? To je docíleno druhou části kódu: (subsetp $?k $?kyslikmuj). Zde na to jdeme opačně než u první části 2. podmínky pro kyslík. Seznam s informacemi o kyslíku, který je napevno definován v bázi faktů, musíme porovnat se seznamem od uživatele (s jeho požadavky na baktérii). U baktérie kok to bude takto: vezmeme si seznam pro kyslik - z báze faktů (zde je aerobni A anaerobni) a tento seznam ma byt podmnozinou a to seznamu od uzivatele. Ale při zadání vlastnosti aerobni tomu díky této části podmínky není. (aerobni anaerobni) --> není podmnožinou (aerobni). Navíc je zde vlastnost anaerobni. Proto nebude vybrána baktérie s názvem kok.

(stáhnout: bakterie.clp)


<== Zpět       ^ Nahoru ^


KONEC 10.LEKCE  

Validace

Valid XHTML 1.0 Strict

Valid CSS!

Monitoring webu