Kompatibilita se opět týká nových faktů, o kterých má náš program vědět. Tedy je vhodné vytvořit novou strukturu deffacts zachycující kompatibilní krevní skupiny. Kompatibilita znamená např. v případě (kompatibilita 0 A), že osoba s krví 0 může darovat osobě s krví A.
(deffacts kompatibilni_krevni_skupiny
(kompatibilita 0 A)
(kompatibilita B AB)
(kompatibilita A AB)
)
(defrule vypis_kompatibilni_skupiny_1moznost
(zkoumame ?neco)
(kompatibilita ?neco ?y)
=>
(printout t "Osoba s krevni skupinou:"?neco " " "muze darovat krev osobe s krevni skupinou:" ?y crlf)
)
Za podmínky, že tedy máme před sebou určitou zkoumanou krevní skupinu ?neco viz. podmínka (zkoumame ?neco) a zároveň osoba, která má tuto zkoumanou skupinu ?neco, může darovat osobě se skupinou ?y (viz. podmínka (kompatibilita ?neco ?y)). Všimněte si názvů proměnných v obou podmínkách.
Druhé pravidlo, je pro případ, že daná krevní skupina se nachází ve faktu pro kompatibilitu na druhé pozici (vedle ?x)
(defrule vypis_kompatibilni_skupiny_2moznost
(zkoumame ?neco)
(kompatibilita ?x ?neco)
=>
(printout t "Osobe s krevni skupinou:"?neco " " "muze byt darovana krev:" ?x crlf)
)