(define (cube x) (* x x x)) (define (cube-root x) (define (improve guess) (/ (+ (/ x (* guess guess)) (* 2 guess)) 3.0)) (define epsilon 0.0001) (define (good-enough? guess) (< (abs (- (cube guess) x)) epsilon)) (define (cube-iter guess) (if (good-enough? guess) guess (cube-iter (improve guess)))) (if (< x 0) (- (cube-root (-x))) (cube-iter 1.0))) ; Test it out (map cube-root (map cube '(0 1 2 3 4 5 6 7 8 1000 1000000 1000000000 0.001 0.000001))) ; (.03901844231062338 1. 2.000004911675504 3.0000005410641766 4.000000000076121 5.000000000287929 6.000000000047538 7.000000000000461 8.00000003355707 1000. 1000000. 1000000000. 3.9018580584466174e-2 .03901844231062351)