sicp-solutions/chapter-2/ex-2.05.scm

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