(module simple-goal-test mzscheme (require (planet "inference.ss" ("williams" "inference.plt"))) (define-ruleset simple-goal-test-rules) (define-rule (rule-1 simple-goal-test-rules) (overworked ?x) <== (lecturing ?x) (marking-practicals ?x)) (define-rule (rule-2 simple-goal-test-rules) (lecturing alison) <== (month february)) (define-rule (rule-3 simple-goal-test-rules) (marking-practicals ?x) <== (month february)) (define-rule (rule-4 simple-goal-test-rules) (bad-mood ?x) <== (overworked ?x)) (define-rule (rule-5 simple-goal-test-rules) (bad-mood ?x) <== (slept-badly ?x)) (define-rule (rule-6 simple-goal-test-rules) (weather cold) <== (month february)) (define-rule (rule-7 simple-goal-test-rules) (economy bad) <== (year 1993)) (define (solve-simple-goal-test) (with-new-inference-environment (activate simple-goal-test-rules) (current-inference-trace #t) (assert '(month february)) (assert '(year 1993)) (let ((result (check '(bad-mood alison)))) (printf "(check '(bad-mood alison)) = ~a ~n" result) (if (not (null? result)) (printf "Alison is in a bad mood.~n") (printf "Alison is not (known to be) in a bad mood.~n"))))) (solve-simple-goal-test) )