sicp每日一题[2.5]
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.
这道题目难度也不大,只要实现一个辅助函数来计算结果中包含了几个 base 的乘积即可。
; 计算 n 中最多包含几个 base 的积
(define (get-power n base)
(define (iter k last)
(if (= (remainder last base) 0) ; 如果余数为0,说明能够被base整除,则次数 +1
(iter (+ k 1) (/ last base))
k))
(iter 0 n))
(define (cons a b)
(* (expt 2 a) (expt 3 b)))
(define (car z)
(get-power z 2))
(define (cdr z)
(get-power z 3))
(define p (cons 3 2))
(display p)
(newline)
(car p)
(cdr p)
; 执行结果
72
3
2