RULES

(R0  IF
     AND-IF
     (not (member-tree? 'x '?x))
     THEN
     (constant ?x))
(R1  IF   
     THEN (deriv x 1))
(R2  IF (constant ?x)
     THEN (deriv ?x 0))
(R3  IF
     (deriv ?x ?dx)
     (deriv ?y ?dy)
     THEN (deriv (+ ?x ?y) (+ ?dx ?dy)))
(R4  IF
     (deriv ?x ?dx)
     (deriv ?y ?dy)
     THEN (deriv (- ?x ?y) (- ?dx ?dy)))
(R5  IF
     (deriv ?x ?dx)
     (deriv ?y ?dy)
     THEN (deriv (* ?x ?y) (+ (* ?x ?dy) (* ?dx ?y))))
(R6  IF
     (deriv ?x ?dx)
     (deriv ?y ?dy)
     THEN (deriv (/ ?x ?y) (- (/ ?dx ?y) (/ ?x (expt ?y 2)))))
(R7  IF
     (deriv ?x ?dx)
     THEN (deriv (- ?x) (- ?dx)))
(R8  IF
     (deriv ?x ?dx)
     (constant ?n)
     THEN (deriv (expt ?x ?n)
		 (* ?n (expt ?x (- ?n 1)) ?dx)))
(R9  IF
     (deriv ?x ?dx)
     THEN (deriv (cos ?x) (* (- (sin ?x)) ?dx)))

CODE

(define (member-tree? thing tree)
  (cond ((equal? thing tree) #t)
	((pair? tree)
	 (or (member-tree? thing (car tree))
	     (member-tree? thing (cdr tree))))
	(else #f)))
