The code is as follows:
(define (square x) (* x x))
(define (abs x) (if (< x 0) (- x) x))
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x) x)))
(define (average x y) (/ (+ x y) 2))
(define (improve guess x) (average guess (/ x guess)))
(define (good-enough? guess x)
(< (abs (- (square guess) x)) 0.001))
(define (sqrt x) (sqrt-iter 1.0 x))
(define (cube x) (* x x x))
(define (cubrt-itr y x) (if (good-enough y x) y (cubrt-iter (improve! y x) x)))
(define (improve! y x) ((/ (+ (* 2 y) (/ x (square y))) 3)))
(define (good-enough y x) (< (abs (- (cube y) x)) 0.001))
(define (cubrt x) (cubrt-iter 1.0 x))
Please check the code it works for square root e.g when I type in
(sqrt 144)
it gives me 12 but that is not the case for the cube root procedure -
it gives me the error
ERROR IN cubrt, console@18:20 -- Unbound variable error
Is there a way I can write this code better. Where am I going wrong?
You have defined cubrt-itr
, but are calling cubrt-iter
. Such mistakes might be more obvious if you used less abbreviated names for your variables.