2014-01-22 5 views
0
(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) 

Когда я пытаюсь запустить программу, она идет без вывода каких-либо результатов. Как это исправить?Схема: Рекурсия для квадратного корня

+1

Попробуйте [DrRacket IDE] (http://racket-lang.org/). Вы получаете правильную идентификацию, выделение соответствующих скобок и информацию о том, что не так, когда вы запускаете ее, а также отладчик для логических ошибок. – Sylwester

ответ

3

Я рекомендую вам написать код с лучшим стилем отступа, потому что это сделает ошибку более заметной.

(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 

Я получил ответ 1 21145/50952.

Смежные вопросы