(defrule init (true null) => (add (sensor-active none)) (add (sensor-working sensor1)) (add (sensor-working sensor2)) (add (mode failure)) (enable (timer 1 10)) (print ("default rule fired!")) (disable (self)) ) (defrule sensor-failed (sensor-working ?) (sensor-failed ?) => (delete (sensor-working ?)) ) (defule check-active (sensor-active ?) (sensor-failed ?) => (delete (sensor-active ?)) (add (sensor-active none)) ) (defrule make-working (sensor-active none) (sensor-working ?) => (add (sensor-active ?)) (delete (mode failure)) (add (mode normal)) (delete (sensor-active none)) ) (defrule failure (mode normal) (sensor-active none) (sensor-failed sensor1) (sensor-failed sensor2) => (add (mode failure)) (delete (mode safe)) (delete (mode normal)) ) (defrule trigger1 (timer-triggered 1) => (print ("Sensor 1 failure.")) (add (sensor-failed sensor1)) (enable (timer 2 10)) (delete (timer-triggered 1)) (disable (self)) ) (defrule trigger2 (timer-triggered 2) => (print ("Sensor 2 failure.")) (add (sensor-failed sensor2)) (enable (timer 3 10)) (delete (timer-triggered 2)) (disable (self)) ) (defrule trigger3 (timer-triggered 3) => (print ("Sensor 1 is now working.")) (delete (sensor-failed sensor1)) (add (sensor-working sensor1)) (enable (timer 4 10)) (delete (timer-triggered 3) (disable (self)) ) (defrule trigger4 (timer-triggered 4) => (print ("Sensor 2 is now working.")) (delete (sensor-failed sensor2)) (add (sensor-working sensor2)) (enable (timer 1 10)) (delete (timer-triggered 4)) (disable (self)) )