1.8 Exercise 1.8

To make this exercise more interesting, I’ve written an iteration procedure which takes an improve function as an argument. This means that the only difference between a procedure computing square roots and a procedure computing cube roots is the choice of improvement function. This generalization is handled differently later in the chapter.

(I use my previously-defined good-enough? procedure with a good-enough-factor of 0.001.)

(define (cube-root x)
  (root-iter x 1.0 0.0 cube-root-improve))
(define (root-iter x guess previous-guess improve)
  (if (good-enough? guess previous-guess) guess
      (root-iter x (improve guess x) guess improve)))
(define (cube-root-improve x guess)
  (/
   (+
    (/ x (* guess guess))
    (* 2 guess))
   3))