SICP Chapter 1.1 The Element of Programming
2012. 8. 16. 01:39
1.1장을 공부하면서 생긴 소스파일
;; ex 1.2. (/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 3))))) (* 3 (- 6 2) (- 2 7))) ;; ex 1.3. (define (square x) (* x x)) (define (sum-of-squares x y) (+ (square x) (square y))) (define (ex1.3. a b c) (cond ((and (< a c) (< a b)) (sum-of-squares b c)) ((< b c) (sum-of-squares a c)) (else (sum-of-squares a b)))) ;; ex 1.4. (define (a-plus-abs-b a b) ((if (> b 0) + -) a b)) ;; ex 1.5. (define (p) (p)) (define (test x y) (if (= x 0) 0 y)) ;; 1.1.7 (define (sqrt-book x) (sqrt-iter 1.0 x)) (define (sqrt-iter guess x) (if (good-enough? guess x) guess (sqrt-iter (improve guess x) x))) (define (improve guess x) (average guess (/ x guess))) (define (average x y) (/ (+ x y) 2)) (define (good-enough? guess x) (< (abs (- (square guess) x)) 0.001)) #|| ex 1.6. since applicative order (sqrt 9) (sqrt-iter 1.0 9) (new-if (good-enough? 1.0 9) 1.0 (sqrt-iter (improve 1.0) 9)) (new-if #f 1.0 (sqrt-iter 5.0 9)) (new-if #f 1.0 (new-if (good-enough? 5.0 9) 5.0 (sqrt-iter (improve 5.0) 9))) (new-if #f 1.0 (new-if #f 5.0 (sqrt-iter 3.4 9))) keep going like this. even after there is #t ||# ;; ex 1.7. ;; try 10000000 and 0.0001 (define (square-root x) (sqrt-iter1 1.0 x)) (define (sqrt-iter1 guess x) (if (good-enough?1 guess (improve guess x)) guess (sqrt-iter1 (improve guess x) x))) (define (good-enough?1 x n) (< .999 (/ n x) 1.001)) (define (improve guess x) (average guess (/ x guess))) (define (average x y) (/ (+ x y) 2)) ;; ex 1.8. (define (cube-root x) (define (cube-root-iter guess) (if (good-enough?c guess (improve-c guess)) guess (cube-root-iter (improve-c guess)))) (define (good-enough?c guess next) (< .999 (/ next guess) 1.001)) (define (improve-c guess) (/ (+ (/ x (square guess)) (* 2 guess)) 3)) (cube-root-iter 1.0))