Extending basic differentiator to handle more kinds of expressions
Your definitions are correct except for one minor detail.  The cond clause:

((= m2 1) m1)


should be:

((=number? m2 1) m1)


since one needs to test first whether m2 is a number.

Stylistically, I would prefer to define base and exponent as:

(define base cadr)
(define exponent caddr)


although there is certainly nothing wrong with your definitions.