Code Review

Compare your solutions

    (define (cons x y)
  (* (exp 2 x) (exp 3 y)))

(define (car z)
  (define (car-iter n counter)
    (if (and (>= n 2) (divides? n 2))
      (car-iter (/ n 2) (+ counter 1))
      counter))
  (car-iter z 0))

(define (cdr z)
  (define (cdr-iter n counter)
    (if (and (>= n 3) (divides? n 3))
      (cdr-iter (/ n 3) (+ counter 1))
      counter))
  (cdr-iter z 0))

; HELPERS:

(define (exp base degree)
  (define (exp-iter b n a)
    (cond
      ((< n 0) (/ 1 (exp-iter b (- n) a)))
      ((= n 0) (if (= a 1) 1 a))
      ((even? n) (exp-iter (* b b) (/ n 2) a))
      (else (exp-iter b (- n 1) (* a b)))))

  (exp-iter base degree 1))

(define (divides? a b)
  (= (remainder a b) 0))

(define (>= a b) (not (< a b)))