1.3.4
Posted on 2015-02-16 00:39:53 +0900 in SICP
In general, programming languages impose restrictions on the ways in which computational elements can be manipulated. Elements with the fewest restrictions are said to have first-class status. Some of the ``rights and privileges’’ of first-class elements are:
- They may be named by variables.
- They may be passed as arguments to procedures.
- They may be returned as the results of procedures.
- They may be included in data structures.
1.40
(define tolerance 0.00001)
(define (fixed-point f first-guess)
(define (close-enough? v1 v2)
(< (abs (- v1 v2)) tolerance))
(define (try guess)
(let ((next (f guess)))
(if (close-enough? guess next)
next
(try next))))
(try first-guess))
(define dx 0.00001)
(define (deriv g)
(lambda (x)
(/ (- (g (+ x dx)) (g x))
dx)))
(define (newton-transform g)
(lambda (x)
(- x (/ (g x) ((deriv g) x)))))
(define (newtons-method g guess)
(fixed-point (newton-transform g) guess))
(define (square x) (* x x))
(define (cube x) (* x x x))
(define (cubic a b c)
(lambda (x)
(+ (cube x)
(* a (square x))
(* b x)
c)))
-> (newtons-method (cubic 8 16 10) 1)
-5.3652300134140924
1.41
(define (double f)
(lambda (x) (f (f x))))
(define (inc x) (+ x 1))
-> ((double inc) 1)
3
-> (((double (double double)) inc) 5)
21
It increases $2^2^2$.
1.42
(define (compose f g)
(lambda (x) (f (g x))))
1.43
(define (repeated f x)
(if (= x 1)
f
(compose f (repeated f (- x 1)))))
1.44
(define (smooth f dx)
(lambda (x)
(/ (+ (f x)
(f (+ x dx))
(f (- x dx)))
3)))
(define (n-fold-smooth f dx n)
(repeated (smooth f dx) n))
1.46
(define (iterative-improve good-enough? improve)
(define (iter guess)
(if (good-enough? guess)
guess
(iter (improve guess))))
iter)
Hide Comments
comments powered by Disqus