#
Basic differentiator
^{
}

Show how to extend the basic differentiator to handle more kinds of expressions. For instance, implement the differentiation rule

by adding a new clause to the deriv program and defining appropriate procedures exponentiation?, base, exponent, and make-exponentiation. (You may use the symbol ** to denote exponentiation.) Build in the rules that anything raised to the power 0 is 1 and anything raised to the power 1 is the thing itself.

```
(check-equal? (exponentiation? '(** x 3)) #t)
(check-equal? (exponentiation? '(+ x 3)) #f)
(check-equal? (make-exponentiation 'x 2) '(** x 2))
(check-equal? (exponent '(** x 3)) 3)
(check-equal? (base '(** (+ x 1) 3)) '(+ x 1))
(check-equal? (deriv '(** x 3) 'x) '(* 3 (** x 2)))
(check-equal? (make-exponentiation 'x 0) 1)
(check-equal? (make-exponentiation '(+ (/ x y) 4) 1) '(+ (/ x y) 4))
```