SICP問題2.5

問題の意味が良く理解できなかったが、 2 と 3 は互いに素であるので、(2^a)*(3^b) である整数を2で割り切れる回数がa, 3で割り切れる回数がbとなる。
ということで実装。

(define (cons x y)
  (* (expt 2 x) (expt 3 y)))
(define (car z)
  (define (iter div exp)
    (if (= (remainder div 2) 0)
  (iter (/ div 2) (+ exp 1))
  exp))
  (iter z 0))
(define (cdr z)
  (define (iter div exp)
    (if (= (remainder div 3) 0)
  (iter (/ div 3) (+ exp 1))
  exp))
  (iter z 0))