(deffacts solve-items (solve 0 4) (solve 1 4) (solve 2 4) (solve 3 4) ) (defrule acker-m-0 ?compute <- (compute 0 ?n) => (retract ?compute) (assert (ackerman 0 ?n (+ ?n 1))) ) (defrule acker-n-0-pre (compute ?m&:(> ?m 0) 0) (not (ackerman =(- ?m 1) 1 ?)) => (assert (compute (- ?m 1) 1)) ) (defrule acker-n-0 ?compute <- (compute ?m&:(> ?m 0) 0) (ackerman =(- ?m 1) 1 ?val) => (retract ?compute) (assert (ackerman ?m 0 ?val)) ) (defrule acker-m-n-pre-1 (compute ?m&:(> ?m 0) ?n&:(> ?n 0)) (not (ackerman ?m =(- ?n 1) ?)) => (assert (compute ?m (- ?n 1))) ) (defrule acker-m-n-pre-2 (compute ?m&:(> ?m 0) ?n&:(> ?n 0)) (ackerman ?m =(- ?n 1) ?newn) (not (ackerman =(- ?m 1) ?newn ?)) => (assert (compute (- ?m 1) ?newn)) ) (defrule acker-m-n ?compute <- (compute ?m&:(> ?m 0) ?n&:(> ?n 0)) (ackerman ?m =(- ?n 1) ?newn) (ackerman =(- ?m 1) ?newn ?val) => (retract ?compute) (assert (ackerman ?m ?n ?val)) ) (defrule acker-solve (solve ?m ?n) (not (compute ?m ?n)) (not (ackerman ?m ?n ?)) => (assert (compute ?m ?n)) ) (defrule acker-solved ?solve <- (solve ?m ?n) (ackerman ?m ?n ?result) => (retract ?solve) (printout t "A(" ?m "," ?n ") = " ?result crlf) )