15 hours ago

my attempt to do the exercises in sicp.

## Friday, July 4, 2008

### sicp exercise 1.46

; Exercise 1.46. Several of the numerical methods described in this chapter are instances of an extremely

; general computational strategy known as iterative improvement. Iterative improvement says that, to

; compute something, we start with an initial guess for the answer, test if the guess is good enough,

; and otherwise improve the guess and continue the process using the improved guess as the new guess.

; Write a procedure iterative-improve that takes two procedures as arguments: a method for telling whether

; a guess is good enough and a method for improving a guess. Iterative-improve should return as its value

; a procedure that takes a guess as argument and keeps improving the guess until it is good enough. Rewrite

; the sqrt procedure of section 1.1.7 and the fixed-point procedure of section 1.3.3 in terms of

; iterative-improve.

(define (iterative-improve good-enough? improve-guess)

(lambda (x)

(define (iter guess)

(let ((improved-guess (improve-guess guess)))

(if (good-enough? guess improved-guess)

guess

(iter improved-guess))))

(iter x)))

(define tolerance 0.00001)

(define (close-enough? v1 v2)

(< (abs (- v1 v2)) tolerance))

(define (fixed-point f first-guess)

((iterative-improve close-enough? f) first-guess))

(define (sqrt-iter guess x)

(if (close-enough? guess x)

guess

(sqrt-iter (improve guess x) x)))

;(define (average x y) (/ (+ x y) 2))

(define (sqrt x)

((iterative-improve close-enough? (lambda(y) (/ (+ y (/ x y)) 2))) 1.0))

(display (sqrt 4))(newline)

(display (sqrt 300))(newline)

(display (sqrt 237))(newline)

(display (sqrt 2000000000))(newline)

(display (sqrt 4.49999999))(newline)

Subscribe to:
Post Comments (Atom)

## No comments:

Post a Comment