Решение упражнения 1.46 из SICP
Я запишу процедуру 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