Tento příkaz je obdobou příkazu duplicate. Funguje asi následovně. Dejme tomu, že bychom chtěli změnit bydliště osoby (ulici a město) a přitom chtěli zachovávat JEN aktualizovanou verzi bydliště osoby. To lze udělat s použitím příkazu modify. Jestliže bychom pro tento případ použili příkaz duplicate, pak bychom v bázi faktů měli starou adresu osoby, ale i tu novou (což by nemuselo být na škodu, ale asi bychom se těžko vyznali v tom, která je ta aktuální adresa - platná právě teď). Je tedy lepší použít příkaz modify - starý fakt zmizí, nový zaujme jeho místo.
Kdybychom v příkladu v minulé lekci místo duplicate použili modify, pak by to mohlo vypadat asi takto:
oba příkazy se používají v usuzovací části pravidla.
Duplicate:
vytvoří pozměněnou kopii původního faktu, přičemž původní fakt ponechá v bázi faktůModify:
vytvoří pozměněný fakt z faktu původního, přičemž původní fakt odstraní z báze faktů (modify je zkrátka pořádnější :-)oba něco vkládají
Assert:
v případě příkazu assert vkládám také určitý fakt do báze faktů, ale musím uvést všechny položky faktu a jejich hodnoty (jinak by v bázi faktů byly neúplné informace)Duplicate:
u duplicate stačí vypsat jen ty položky a jejich hodnoty, u kterých bude změna oproti origináluoba něco ruší
Modify:
rozdíl je takový, že příkaz modify, nám také z báze faktů zruší určitý fakt, ale hned ho nahradí jeho aktualizovanou verzíRetract:
u příkazu retract dochází k zrušení určitého faktu a nic víc (žádný fakt není v bázi nahrazován za jiný fakt)Příklad 1.: Předměty a učitelé
Definujeme zde šablonu rozvrh:
(deftemplate rozvrh
(slot den)
(slot hodina)
(slot minuta)
(multislot predmet)
(multislot vyucujici)
)
(deffacts info
(rozvrh (den pondeli) (hodina 8) (minuta 15) (predmet Znalostni technologie I) (vyucujici Peter Mikulecky))
(rozvrh (den utery) (hodina 10) (minuta 45) (predmet Psychologie I) (vyucujici Jiri Sipek))
(rozvrh (den streda) (hodina 8) (minuta 15) (predmet Psychologie sportu) (vyucujici Jiri Sipek))
(rozvrh (den streda) (hodina 12) (minuta 25) (predmet Multimedialni systemy I) (vyucujici Jan Sedlacek))
)
Příklad 2.: Předměty a učitelé
Napište program na seřazení číselného seznamu. Použijte několik metod pro seřazení téhož seznamu (např. výměna dvou sousedních neseřazených hodnot, výměna dvou libovolných neseřazených hodnot, vkládání prvku na jeho místo do částečně seřazeného seznamu, ...). Použijte přitom následující šablonu a příkaz modify.
(deftemplate trideni
(multislot stary_seznam)
(multislot novy_seznam)
(slot pocet_kroku)
(slot metoda_trideni))