(deftemplate nod (slot idx) (slot intrebare) (slot da) (slot nu) ) (deftemplate animal (slot idx) (slot nume) ) (deffacts date (nod-crt) ) (defrule init (declare (salience 10)) ?f <- (nod-crt) => (retract ?f) (load-facts "arbore-animale.txt") (assert (nod-crt radacina)) ) (defrule pune-intrebare ?i <- (nod-crt ?crt) (nod (idx ?crt) (intrebare ?int) (da ?da) (nu ?nu)) => (retract ?i) (printout t ?int) (if (eq (read) da) then (assert (nod-crt ?da)) else (assert (nod-crt ?nu))) ) (defrule raspuns ?i <- (nod-crt ?crt) ?fi <- (animal (idx ?crt) (nume ?num)) => (retract ?i) (printout t "Cred ca animalul este " ?num ". Corect? ") (if (not (eq (read) da)) then (printout t "Cum se cheama animalul tau? ") (bind ?ani (read)) (printout t "Care e intrebarea pe care ar trebui sa o pun pentru ca raspunsul sa fie " ?ani "? " crlf) (bind ?int (readline)) (bind ?idx1 (gensym)) (bind ?idx2 (gensym)) (assert (nod (idx ?crt) (intrebare ?int) (da ?idx1) (nu ?idx2)) (animal (idx ?idx1) (nume ?ani)) (nod-crt incert)) (modify ?fi (idx ?idx2))) (assert (nod-crt incert)) ) (defrule terminare (declare (salience -10)) ?f <- (nod-crt incert) => (retract ?f) (printout t "Mai joci? ") (if (eq (read) da) then (assert (nod-crt radacina)) else (save-facts "arbore-animale.txt")) )