SICPの宿題

問題1.14がワカラナイヨ。
明日の答え合わせで教えてもらおう。

問題1.16

;; if n is even, procedure returns true, otherwise false.      
(define (even? n)
  (= (remainder n 2) 0))

;; ex1.16 procedure "fast-expt and fast-expt-iter"                                         
(define (fast-expt x n)
  (fast-expt-iter x n 1))

(define (fast-expt-iter x n a)
  (cond ((= n 0) a)
        ((even? n) (fast-expt-iter (* x x) (/ n 2) a ))
        (else (fast-expt-iter x (- n 1) (* a x) ))))

問題1.17

;; double                                                      
(define (double n)
  (+ n n))

;; halve                                                       
(define (halve n)
  (/ n 2))

;; ex1.17 procedure "fast-mult"                                
(define (fast-mult x n)
  (cond [(= n 0) 0]
        [(= n 1) x]
        [(even? n) (fast-mult (double x) (halve n))]
        [else (+ x (fast-mult x (- n 1)))]))

問題1.18

;; ex1.18 procedure "fast-mult and fast-mult-iter"             
(define (fast-mult x n)
  (fast-mult-iter x n 0))

(define (fast-mult-iter x n a)
  (cond [(= n 0) a]
        [(even? n) (fast-mult-iter (double x) (halve n) a)]
        [else (fast-mult-iter x (- n 1) (+ x a))]))