(deffacts max-num (loop-max 100)) (defrule loop-assert (loop-max ?n) => (bind ?i 1) (while (<= ?i ?n) do (assert (number ?i)) (bind ?i (+ ?i 1)))) (defrule try-number (number ?n) => (assert (try-number ?n))) (defrule largest-unknown ?attempt <- (try-number ?n) (not (largest ?)) => (retract ?attempt) (assert (largest ?n))) (defrule largest-smaller ?old-largest <- (largest ?n1) ?attempt <- (try-number ?n2&:(> ?n2 ?n1)) => (retract ?old-largest ?attempt) (assert (largest ?n2))) (defrule largest-bigger (largest ?n1) ?attempt <- (try-number ?n2&:(<= ?n2 ?n1)) => (retract ?attempt)) (defrule print-largest (declare (salience -1)) (largest ?n) => ;(printout t "Largest number is " ?n crlf) ) (defglobal ?*time* = (time)) (set-reset-globals FALSE) (deffunction run-n-times (?n) (while (> ?n 0) do (reset) (run) (bind ?n (- ?n 1)))) (run-n-times 1000) (printout t "Elapsed time: " (- (time) ?*time*) crlf)