SICP 연습문제 1.9 ~ 1.13
2013. 1. 30. 02:05
;; ex 1.9 #|| (define (+ a b) (if (= a 0) b (inc (+ (dec a) b)))) in this case, (+ 4 5) (inc (+ 3 5)) (inc (inc (+ 2 5))) (inc (inc (inc (+ 1 5)))) (inc (inc (inc (inc (+ 0 5))))) (inc (inc (inc (inc 5)))) (inc (inc (inc 6))) (inc (inc 7)) (inc 8) 9 linear recursive (define (+ a b) (if (= a 0) b (+ (dec a) (inc b)))) in this case, (+ 4 5) (+ 3 6) (+ 2 7) (+ 1 8) (+ 0 9) 9 linear iterative ||# ;; ex 1.10 (define (A x y) (cond ((= y 0) 0) ((= x 0) (* 2 y)) ((= y 1) 2) (else (A (- x 1) (A x (- y 1)))))) #|| (A 1 10) (A 0 (A 1 9)) (A 0 (A 0 (A 1 8))) ... (A 0 (A 0 (A 0 (A 0 ... (A 1 1) ... )))) (A 0 (A 0 ... 2 ...)) (expt 2 10) so (A 1 x) = (expt 2 x) (A 2 4) (A 1 (A 2 3)) (A 1 (A 1 (A 2 2))) (A 1 (A 1 (A 1 (A 2 1)))) (A 1 (A 1 (A 1 2))) (A 1 (A 1 (A 0 (A 1 1)))) (A 1 (A 1 (A 0 2))) (A 1 (A 1 (expt 2 2))) (A 1 (expt 2 (expt 2 2))) (expt 2 (expt 2 (expt 2 2))) so (A 2 x) = 2^2^2^2^...^2 (x is # of 2) (A 3 3) (A 2 (A 3 2)) (A 2 (A 2 (A 3 1))) (A 2 (A 2 2)) (A 2 (expt 2 2)) so (A 3 x) = 2^2^2^2^...^2 (# of 2 is same as 2^2^2^2^...^2 -- there are x-1 # of 2's) ||# (define (f n) (A 0 n)) ;; returns (* 2 y) (define (g n) (A 1 n)) ;; returns (expt 2 n) (define (h n) (A 2 n)) ;; returns 2^2^2^...^2(# of 2's is n) ;; ex 1.11 (define (f-re n) (if (< n 3) n (+ (f-re (- n 1)) (* 2 (f-re (- n 2))) (* 3 (f-re (- n 3)))))) (define (f-iter n) (define (iter a b c cnt) (cond ((< n 3) n) ((= cnt n) a) (else (iter (+ a (* 2 b) (* 3 c)) a b (+ cnt 1))))) (iter 2 1 0 2)) ;; ex 1.12 (define (pascal-element row col) (if (or (< row 3) (= col 1) (= col row)) 1 (+ (pascal-element (- row 1) col) (pascal-element (- row 1) (- col 1)))))
exercise 1.13은 종이에 했다