因为找不到SICP的辅导书, 有些要求explain的solution就不知道答案了, sigh...
不知道直接去找MIT的教授要, 他们会不会给...
1.1.7 Square Roots by Newton's Method
(define (avg x y)
(/ (+ x y) 2))
(define (abs x)
(if (< x 0)
(- x)
x))
(define (IsGoodEnough? guess target)
(< (abs (- (* guess guess) target)) 0.00000000000000001))
(define (improve guess target)
(avg (/ target guess) guess))
(define (sqrt-iter guess target)
(if (ISGoodEnough? guess target)
guess
(sqrt-iter (improve guess target)
target)))
(define (sqrt x)
(sqrt-iter 1.0 x))
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause)))
(define (new-sqrt-iter guess target)
(new-if (ISGoodEnough? guess target)
guess
(new-sqrt-iter (improve guess target)
target)))
(define (new-sqrt x)
(new-sqrt-iter 1.0 x))
Exercise 1.8: Newton’s method for cube roots is based on the fact that if y is
an approximation to the cube root of x, then a better approximation is given
b y the value
x/y^2 + 2y
----------
3
Use this formula to implement a cube-root procedure analogous to the squareroot procedure. (In section Section 1.3.4 [1-3-4], page 69 we will see how to implement Newton’s method in general as an abstraction of these square-root and cube-root procedures.)
section 1.3.4 we will see how to implement Newton's method in general as an abstraction of these square-root and cube-root procedures.)
My Solution:
(define squre
(lambda (x)
(* x x)))
(define abs
(lambda (x)
(if (< x 0)
(- x)
x)))
(define cube
(lambda (x)
(* x x x)))
(define IsGoodEnough?
(lambda (guess target)
(< (abs (- (cube guess) target)) 0.0000000000001)))
(define improve
(lambda (guess target)
(/ (+ (/ target (squre guess)) (* 2 guess)) 3)))
(define cube-iter
(lambda (guess target)
(if (isGoodEnough? guess target)
guess
(cube-iter (improve guess target) target))))
(define cube-root
(lambda (n)
(cube-iter 1.0 n)))
(cube-root 8)
(cube-root 27)
(cube-root 3)
(cube-root 2)
不知道直接去找MIT的教授要, 他们会不会给...
1.1.7 Square Roots by Newton's Method
(define (avg x y)
(/ (+ x y) 2))
(define (abs x)
(if (< x 0)
(- x)
x))
(define (IsGoodEnough? guess target)
(< (abs (- (* guess guess) target)) 0.00000000000000001))
(define (improve guess target)
(avg (/ target guess) guess))
(define (sqrt-iter guess target)
(if (ISGoodEnough? guess target)
guess
(sqrt-iter (improve guess target)
target)))
(define (sqrt x)
(sqrt-iter 1.0 x))
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause)))
(define (new-sqrt-iter guess target)
(new-if (ISGoodEnough? guess target)
guess
(new-sqrt-iter (improve guess target)
target)))
(define (new-sqrt x)
(new-sqrt-iter 1.0 x))
Exercise 1.8: Newton’s method for cube roots is based on the fact that if y is
an approximation to the cube root of x, then a better approximation is given
b y the value
x/y^2 + 2y
----------
3
Use this formula to implement a cube-root procedure analogous to the squareroot procedure. (In section Section 1.3.4 [1-3-4], page 69 we will see how to implement Newton’s method in general as an abstraction of these square-root and cube-root procedures.)
section 1.3.4 we will see how to implement Newton's method in general as an abstraction of these square-root and cube-root procedures.)
My Solution:
(define squre
(lambda (x)
(* x x)))
(define abs
(lambda (x)
(if (< x 0)
(- x)
x)))
(define cube
(lambda (x)
(* x x x)))
(define IsGoodEnough?
(lambda (guess target)
(< (abs (- (cube guess) target)) 0.0000000000001)))
(define improve
(lambda (guess target)
(/ (+ (/ target (squre guess)) (* 2 guess)) 3)))
(define cube-iter
(lambda (guess target)
(if (isGoodEnough? guess target)
guess
(cube-iter (improve guess target) target))))
(define cube-root
(lambda (n)
(cube-iter 1.0 n)))
(cube-root 8)
(cube-root 27)
(cube-root 3)
(cube-root 2)