Pomocné fakty jsou takové fakty, kterými můžete určitým způsobem řídit běh programu (kdy - za jakých podmínek se co provede). Například máme fakta - seznamy, obsahující informace o ovoci. Už víme, jak zajistit výpis daných seznamů. Budeme ale požadovat, aby byl výpis proveden jen v případě, že si tak uživatel přeje. Tedy jestliže sám zadá ano nebo ne.
Tento problém je řešen s poznámkami v následujícím souboru: (stáhnout pomocne_fakty.clp)Tím, že pravidlu nastavíte prioritu docílíte toho, že pravidlo může být vykonáno dříve (priorita vyšší - definujete kladné celé číslo) nebo později (priorita nižší - definujete záporné celé číslo) než pravidla ostatní.
Je to dobrý způsob jak např. docílit toho, aby se jedno pravidlo vykonalo dříve a to druhé počkalo až se první pravidlo vykoná (nebo naopak). Řídíte si běh programu (resp. pořadí vykonávání pravidel - pořadí pravidel jak se budou řadit v Agendě Clipsu) tak jak chcete vy (tedy ne vždy se to podaří na první pokus jak chcete :-().
Když porovnám programování např. v procedurálním jazyku Pascal a programování v Clipsu, tak v Pascalu jsem měla větší přehled o tom, co kdy bude vykonáno. Zkrátka jste měli hlavní program ohraničený beginem a endem. Uvnitř těchto hranic byly nějaké příkazy. Dále také procedury či funkce, které jste volali a věděli jste docela rychle kam se volání procedury či funkce odkazuje (věděli jste kam se dívat - jak to celé probíhá). Jednoduše to bylo v posloupnostech příkazů a ne tak nějak příliš chaoticky napřeskáčku.
V Clipsu je situace jiná. Nemáte zde žádný hlavní program (jakési jádro toho všeho) ze kterého voláte nějaké funkce či procedury. Dostáváte se jaksi mimo hranice konstrukce beginu a endu. Máte zde sadu pravidel, které mají za úkol něco vykonat. Hůře se odhaluje co bude vykonáno dříve a co později. Musíte projít všechna pravidla a zkoumat. Je pravdou, že si pravidla můžete seřadit za sebou (tam kde píšete zdrojový kód programu) podle toho v jakém pořadí budou vykonávána (pořadí nemá vliv na fungování programu - inferenční mechanismus se řídí především tím co je definováno v podmínkové části pravidla tzn. i danou prioritou pokud je v pravidle stanovena).
Pokusila jsem se vytvořit obrázek, který toto popisuje.(declare (salience 5))
(declare (salience -50))
Kladným číslem definujeme vysokou prioritu a záporným nízkou tzn. že pravidlo s vyšší prioritou než mají ostatní pravidla bude vykonáno dříve. Záporným číslem definujeme nízkou prioritu tzn. že pravidlo s nižší prioritou, než mají ostatní pravidla, bude vykonáno později - až po vykonání těch s vyšší prioritou.
(deffacts databaze
(zvirata afrika slon zebra zirafa opice antilopa pes)
(zvirata asie tygr slon opice panda pes)
(zvirata evropa pes zajic jelen kocka medved rys)
)
Úloha A+B + konec programu : zvirata_1 |
Úloha C : zvirata_2 |
Úloha D: zvirata_3 |
Úloha E+F : zvirata_4 |
Úloha G: zvirata_5 |