시간: 2010.12.7 PM 6:30
<복습>
<복습>
범위: 1.2.3 ~ 1.2.4
발표: 유훈종
<진도>
범위: 1.2.5 ~ 1.2.6
발표: 이준
;;EXERCISE 1.15
(define (cube x) (* x x x))
(define (p x)
(display "; call p\n")
(- (* 3 x) (* 4 (cube x))))
(define (sine angle)
(if (not (> (abs angle) 0.1))
angle
(p (sine (/ angle 3.0)))))
;; Linear recursion
;; Θ(n), Θ(n)
(define (expt b n)
(if (= n 0)
1
(* b (expt b (- n 1)))))
;; Linear iteration
;; Θ(n), Θ(1)
(define (expt b n)
(expt-iter b n 1))
(define (expt-iter b counter product)
(if (= counter 0)
product
(expt-iter b
(- counter 1)
(* b product))))
;; Logarithmic iteration
(define (fast-expt b n)
(cond ((= n 0) 1)
((even? n) (square (fast-expt b (/ n 2))))
(else (* b (fast-expt b (- n 1))))))
(define (even? n)
(= (remainder n 2) 0))
;; EXERCISE 1.16
(define (proc-expt b n)
(define (iter b n a)
(cond ((= n 0) a)
((even? n) (iter (square b) (/ n 2) a))
(else (iter b (- n 1) (* a b)))))
(iter b n 1)
)
;; EXERCISE 1.17
(define (custom-mult a b)
(if (= b 0)
0
(+ a (custom-mult a (- b 1)))))
(define (double x)
(* x 2))
(define (halve x)
(/ x 2))
(define (fast-mult a b)
(cond ((or (= a 0) (= b 0)) 0)
((= b 1) a)
((even? b) (double (fast-mult a (halve b))))
(else (+ a (fast-mult a (- b 1))))))
; (fast-mult 3 5)
; (+ 3 (fast-mult 3 4))
; (+ 3 (double (fast-mult 3 2)))
; (+ 3 (double (double (fast-mult 3 1))))
; (+ 3 (double (double 3)))
; (+ 3 (double 6))
; (+ 3 12)
;; EXERCISE 1.18
(define (proc-mult b n)
(define (iter b n a)
(cond ((= n 0) a)
((even? n) (iter (double b) (halve n) a))
(else (iter b (- n 1) (+ a b)))))
(iter b n 0)
)