(defrule warm-blooded
(animal ?x)
(characteristic ?x warm-blooded)
=>
(assert (is-warm-blooded ?x)))
(defrule has-hair
(animal ?x)
(characteristic ?x has-hair)
=>
(assert (has-hair ?x)))
(defrule gives-birth-to-live-young
(animal ?x)
(characteristic ?x gives-birth-to-live-young)
=>
(assert (gives-birth-to-live-young ?x)))
(defrule mammal
(is-warm-blooded ?x)
(has-hair ?x)
(gives-birth-to-live-young ?x)
=>
(printout t ?x " is a mammal." crlf))
(defrule not-mammal
(animal ?x)
(not (is-warm-blooded ?x))
=>
(printout t ?x " is not a mammal." crlf))
(deffacts initial-facts
(animal dog)
(characteristic dog warm-blooded)
(characteristic dog has-hair)
(characteristic dog gives-birth-to-live-young))
(reset)
(run)
(exit)
KGRlZnJ1bGUgd2FybS1ibG9vZGVkCiAgKGFuaW1hbCA/eCkKICAoY2hhcmFjdGVyaXN0aWMgP3ggd2FybS1ibG9vZGVkKQo9PgogIChhc3NlcnQgKGlzLXdhcm0tYmxvb2RlZCA/eCkpKQoKKGRlZnJ1bGUgaGFzLWhhaXIKICAoYW5pbWFsID94KQogIChjaGFyYWN0ZXJpc3RpYyA/eCBoYXMtaGFpcikKPT4KICAoYXNzZXJ0IChoYXMtaGFpciA/eCkpKQoKKGRlZnJ1bGUgZ2l2ZXMtYmlydGgtdG8tbGl2ZS15b3VuZwogIChhbmltYWwgP3gpCiAgKGNoYXJhY3RlcmlzdGljID94IGdpdmVzLWJpcnRoLXRvLWxpdmUteW91bmcpCj0+CiAgKGFzc2VydCAoZ2l2ZXMtYmlydGgtdG8tbGl2ZS15b3VuZyA/eCkpKQoKKGRlZnJ1bGUgbWFtbWFsCiAgKGlzLXdhcm0tYmxvb2RlZCA/eCkKICAoaGFzLWhhaXIgP3gpCiAgKGdpdmVzLWJpcnRoLXRvLWxpdmUteW91bmcgP3gpCj0+CiAgKHByaW50b3V0IHQgP3ggIiBpcyBhIG1hbW1hbC4iIGNybGYpKQoKKGRlZnJ1bGUgbm90LW1hbW1hbAogIChhbmltYWwgP3gpCiAgKG5vdCAoaXMtd2FybS1ibG9vZGVkID94KSkKPT4KICAocHJpbnRvdXQgdCA/eCAiIGlzIG5vdCBhIG1hbW1hbC4iIGNybGYpKQoKKGRlZmZhY3RzIGluaXRpYWwtZmFjdHMKICAoYW5pbWFsIGRvZykKICAoY2hhcmFjdGVyaXN0aWMgZG9nIHdhcm0tYmxvb2RlZCkKICAoY2hhcmFjdGVyaXN0aWMgZG9nIGhhcy1oYWlyKQogIChjaGFyYWN0ZXJpc3RpYyBkb2cgZ2l2ZXMtYmlydGgtdG8tbGl2ZS15b3VuZykpCgoocmVzZXQpCihydW4pCihleGl0KQo=