mgozcu
mgozcu

Reputation: 3

Scheme: Recursivity for square root

(define average (lambda (x y)(/ (+ x y) 2)))
(define improve (lambda (guess X)(average guess (/ X guess))))
(define close-enuf? (lambda(guess X) (<(abs (- (* guess guess) X))0.1)))
(define loop (lambda (guess X)(if close-enuf? guess X ) guess (loop (improve guess X) X)))
(loop 3 2)

When I try to run the program, it goes without giving any output. How do I fix it?

Upvotes: 0

Views: 80

Answers (1)

user3125280
user3125280

Reputation: 2829

I recommend you write the code out with better indentation style, because it will make the mistake more visible.

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

(define improve 
  (lambda (guess X)(average guess (/ X guess))))

(define close-enuf?
  (lambda(guess X) 
    (< (abs (- (* guess guess) X)) 0.5)))

(define loop 
  (lambda (guess X)
    (if close-enuf? guess X) ;; see the error here? (if (close-enuf? guess X)
        guess (loop (improve guess X) X))) ;need another bracket here

I got the answer 1 21145/50952.

Upvotes: 3

Related Questions