(wat-aro)

無職から有職者にランクアップしました

SICP 問題 2.5

(define (cons a b)
  (* (expt 2 a)
     (expt 3 b)))

(define (car c)
  (define (iter n count)
    (if (< 0 (remainder n 2))
        count
        (iter (/ n 2) (+ count 1))))
  (iter c 0))

(define (cdr c)
  (define (iter n count)
    (if (< 0 (remainder n 3))
        count
        (iter (/ n 3) (+ count 1))))
  (iter c 0))

 
 
始め算術演算を使えって条件を見逃してlogを使って書いたのでそれも.

(define (car c)
  (define (iter n)
    (if (= 0 (modulo n 3))
        (iter (/ n 3))
        (log n 2)))
  (iter c))

(define (cdr c)
  (define (iter n)
    (if (= 0 (modulo n 2))
        (iter (/ n 2))
        (log n 3)))
  (iter c))