;;;; -*- mode:Scheme; -*- ;;;;

;;;; TEST RULES

(define (make-zoo-rules)
  (clear-rules)
  (remember-rules
   '(Z1 IF
	((? animal) has hair)
	THEN ((? animal) is a mammal))
   '(Z2 IF
	((? animal) gives milk)
	THEN ((? animal) is a mammal))
   '(Z3 IF
	((? animal) has feathers)
	THEN ((? animal) is a bird))
   '(Z4 IF
	((? animal) flies)
	((? animal) lays eggs)
	THEN ((? animal) is a bird))
   '(Z5 IF
	((? animal) is a mammal)
	((? animal) eats meat)
	THEN ((? animal) is a carnivore))
   '(Z6 IF
	((? animal) is a mammal)
	((? animal) has pointed teeth)
	((? animal) has claws)
	((? animal) has forward-pointing eyes)
	THEN ((? animal) is a carnivore))
   '(Z7 IF
	((? animal) is a mammal)
	((? animal) has hoofs)
	THEN ((? animal) is a ungulate))
   '(Z8 IF
	((? animal) is a mammal)
	((? animal) chews cud)
	THEN ((? animal) is a ungulate))
   '(Z9 IF
	((? animal) is a carnivore)
	((? animal) has tawny color)
	((? animal) has dark spots)
	THEN ((? animal) is a cheetah))
   '(Z10 IF
	 ((? animal) is a carnivore)
	 ((? animal) has tawny color)
	 ((? animal) has black stripes)
	 THEN ((? animal) is a tiger))
   '(Z11 IF
	 ((? animal) is a ungulate)
	 ((? animal) has long neck)
	 ((? animal) has long legs)
	 ((? animal) has dark spots)
	 THEN ((? animal) is a giraffe))
   '(Z12 IF
	 ((? animal) is a ungulate)
	 ((? animal) has black stripes)
	 THEN ((? animal) is a zebra))
   '(Z13 IF
	 ((? animal) is a bird)
	 ((? animal) has long legs)
	 ((? animal) has long neck)
	 ((? animal) is black and white)
	 THEN ((? animal) is a ostrich))
   '(Z14 IF
	 ((? animal) is a bird)
	 ((? animal) swims)
	 ((? animal) is black and white)
	 THEN ((? animal) is a penguin))
   '(Z15 IF
	 ((? animal) is a bird)
	 ((? animal) flies well)
	 THEN ((? animal) is a albatross)))
  (format #t "~%Zookeeper rules recorded."))

;;;; TEST DATA

(define (make-splashy)
  (clear-assertions)
  (remember-assertions
   '(Splashy has feathers)
   '(Splashy lays eggs)
   '(Splashy is black and white)
   '(Splashy swims))
  (format #t "~%Splashy's characteristics recorded:")
  (display-assertions *assertions*))

(define (make-sandy)
  (clear-assertions)
  (remember-assertions
   '(Sandy has long legs)
   '(Sandy has long neck)
   '(Sandy has feathers)
   '(Sandy lays eggs))
  (format #t "~%Sandy's characteristics recorded:")
  (display-assertions *assertions*))

(define (zoo-run-rules rules-fn)
 (make-zoo-rules)
 (rules-fn)
 (chain)
 (display-assertions *assertions*))

(define (zoo-run)
  (zoo-run-rules make-splashy))

