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)