29 lines
505 B
Scheme
29 lines
505 B
Scheme
#lang sicp
|
|
|
|
(define (cons a b)
|
|
(* (expt 2 a)
|
|
(expt 3 b)))
|
|
|
|
(define (car pair)
|
|
(if (= (remainder pair 3) 0)
|
|
(car (/ pair 3))
|
|
(log2 pair)))
|
|
|
|
(define (cdr pair)
|
|
(if (= (remainder pair 2) 0)
|
|
(cdr (/ pair 2))
|
|
(log3 pair)))
|
|
|
|
(define (log2 num)
|
|
(define (aux num acc)
|
|
(if (<= num 1)
|
|
acc
|
|
(aux (/ num 2) (+ acc 1))))
|
|
(aux num 0))
|
|
|
|
(define (log3 num)
|
|
(define (aux num acc)
|
|
(if (<= num 1)
|
|
acc
|
|
(aux (/ num 3) (+ acc 1))))
|
|
(aux num 0))
|