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))