J'ai essayé d'écrire le code suivant dans CLIPS pour un projet d'école (même si je ne comprends pas pourquoi l'IA est fait dans cette langue):
(deftemplate blood
(slot bt)
(multislot acc))
(deffacts acceptance
(blood (bt 0) (acc 0 0))
(blood (bt A) (acc 0 A))
(blood (bt B) (acc 0 B))
(blood (bt AB) (acc 0 A B AB)))
(defrule reading-input
=>
(printout t "Bloodtype of patient? ")
(assert (patient (read)))
(printout t "Bloodtype of donor? ")
(assert (donor (read))))
(defrule check-acceptance
(patient ?patient)
(donor ?donor)
(blood (bt ?bt1) (acc ?acc1))
(test (member$ ?donor ?acc1))
=>
(printout t "Transfusion is safe" crlf))
Pour une raison quelconque, il ne serait pas imprimer quoi que ce soit pour les entrées A
et A
ou quoi que ce soit d'autre. J'ai aussi essayé avec un if then else
déclaration, mais même résultat.
[prev code]
(blood (bt ?bt1) (acc ?acc1))
=>
(if (eq ?patient ?bt1)
then
(printout t ?bt1)
else
(printout t ?donor)))
L'idée est d'écrire un programme qui affiche si la transfusion de sang est sécuritaire ou non.