Resource > SICP Exersise 2_56

Exersise 2.56
 (define (deriv exp var)
   (cond ((number? exp) 0)
     ((variable? exp)
      (if (same-variable? exp var) 1 0))
     ((sum? exp)
      (make-sum (deriv (addend exp) var)
            (deriv (augend exp) var)))
     ((product? exp)
      (make-sum
       (make-product (multiplier exp)
             (deriv (multiplicand exp) var))
       (make-product (deriv (multiplier exp) var)
             (multiplicand exp))))
     ((exponentation? exp)
      (make-product
       (make-product (exponent exp) 
             (make-exponentiation (base exp) (- (exponent exp) 1)))
       (deriv base var)))
     (else
      (error "unknown expression type -- DERIV" exp))))
 
 (define (exponentiation? exp)
   (and (pair? x) (eq? (car x) '**)))
 
 (define (base exp)
   (cadr exp))
 
 (define (exponent exp)
   (caddr exp))
 
 (define (make-exponentiation base exponent)
   (cond [(eq? base 1) 1]
     [(eq? exponent 0) 1]
     [else (list '** base exponent)]))