Exercise 2.5. Show that we can represent pairs of nonnegative integers using only numbers and arithmetic operations if we represent the pair a and b as the integer that is the product 2a3b. Give the corresponding definitions of the procedures cons, car, and cdr.
This is possible because any number 2
n will not contain 3 as a factor. Similarly, any number 3
n will not contain 2 as a factor.
cons
is a straightforward application of what the exercise describes.
(define (cons3 a b)
(* (expt 2 a) (expt 3 b)))
car
and
cdr
just repeatedly divide by 2 (
car
) or 3 (
cdr
) until the number no longer divides evenly. Count the number of even divisions, and return the count as the result.
(define (cdr3 c)
(define (helper x count)
(if (= 0 (remainder x 3))
(helper (/ x 3) (+ 1 count))
count))
(helper c 0))
(define (car3 c)
(define (helper x count)
(if (= 0 (remainder x 2))
(helper (/ x 2) (+ 1 count))
count))
(helper c 0))
;;tests
(car3 (cons3 23 67))
;Value: 23
(cdr3 (cons3 23 67))
;Value: 67