; Turnurile din Hanoi (deftemplate hanoi (slot id) (slot nr) (slot orig) (slot dest) (slot rez) ) (deftemplate muta (slot id) (slot orig) (slot dest) ) (deffacts date (struct) ) (defrule hanoi-init ?s <- (struct) => (retract ?s) (printout t "Cate discuri? ") (bind ?v (read)) (bind ?x (gensym)) (assert (hanoi (id ?x) (nr ?v) (orig A) (dest B) (rez C)) (struct ?x)) ) (defrule hanoi-rec ?s <- (struct ?id $?rest) ?h <- (hanoi (id ?id) (nr ?n&:(> ?n 1)) (orig ?o) (dest ?d) (rez ?r)) => (retract ?s ?h) (bind ?id1 (gensym)) (bind ?id2 (gensym)) (bind ?id3 (gensym)) (assert (hanoi (id ?id1) (nr (- ?n 1)) (orig ?o) (dest ?r) (rez ?d)) (muta (id ?id2) (orig ?o) (dest ?d)) (hanoi (id ?id3) (nr (- ?n 1)) (orig ?r) (dest ?d) (rez ?o)) (struct ?id1 ?id2 ?id3 $?rest)) ) (defrule hanoi-end ?s <- (struct ?id $?rest) ?h <- (hanoi (id ?id) (nr 1) (orig ?o) (dest ?d) (rez ?r)) => (retract ?s ?h) (bind ?id1 (gensym)) (assert (muta (id ?id1) (orig ?o) (dest ?d)) (struct ?id1 $?rest)) )