Procedural Abstraction
Ideas: black-box abstraction, procedures as general methods, higher-order procedures that capture patterns (summation, fixed points, Newton's method), and orders of growth.
;; Square roots by Newton's method (SICP 1.1.7)
(define (average a b) (/ (+ a b) 2))
(define (improve guess x) (average guess (/ x guess)))
(define (good-enough? guess x) (< (abs (- (* guess guess) x)) 0.001))
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x) x)))
(define (my-sqrt x) (sqrt-iter 1.0 x))
(my-sqrt 2) ; 1.4142156862745097
;; Block structure: hide helpers inside
(define (my-sqrt2 x)
(define (good-enough? g) (< (abs (- (* g g) x)) 0.001))
(define (improve g) (average g (/ x g)))
(define (iter g) (if (good-enough? g) g (iter (improve g))))
(iter 1.0))
;; Fixed points (SICP 1.3.3)
(define tolerance 0.00001)
(define (fixed-point f first-guess)
(define (close-enough? a b) (< (abs (- a b)) tolerance))
(let try ((guess first-guess))
(let ((next (f guess)))
(if (close-enough? guess next) next (try next)))))
(fixed-point cos 1.0) ; 0.7390822985224024
(define (average-damp f) (lambda (x) (average x (f x))))
(define (sqrt-fp x) (fixed-point (average-damp (lambda (y) (/ x y))) 1.0))
;; Newton's method as a general procedure
(define dx 0.00001)
(define (deriv g) (lambda (x) (
…