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))
chap1_1.scm