Решение упражнения 1.46 из SICP

12 January, 2008 (22:10) | Решения упражнений

Я запишу процедуру iterative-improve таким образом, чтобы процедура проверки того, достаточно ли хорошо решение использовала значения, полученные на текущей и следующей итерации.

(define (iterative-improve good-enough? improve)
  (define (iteration guess)
    (let ((next (improve guess)))
         (if (good-enough? guess next)
             next
             (iteration next))))
  iteration)

Переписанные процедуры fixed-point и sqrt будут иметь такой вид:

(define (fixed-point f first-guess)
  ((iterative-improve (lambda (guess next)
                              (< (abs (- guess next))
                                 tolerance))
                      f) first-guess))
(define (sqrt x)
  ((iterative-improve (lambda (guess next)
                              (< (abs (- (square guess) x))
                                 tolerance))
                      (lambda (guess)
                              (average guess (/ x guess)))) 1.0))

Абстракция iterative-improve очень удачно включает в себя оба эти процесса.

Comments

Comment from gorilych
Date: July 16, 2008, 9:49 am

в sqrt процедура good-enough? должна сравнивать next, а не guess

Comment from qMax
Date: January 10, 2009, 1:36 am

ай ай!
в iterative-improve потерялся first-guess

Write a comment