下面几题答案,非本人解答,有待验证
练习1.40
(define (cubic a b c)
(lambda (x)
(+ (* x x x) (* a x x) (* b x) c)))
(define (derive g)
(define dx 0.00001)
(lambda (x) (/ (- (g (+ x dx)) (g x)) dx)))
(define (newton-transform g)
(lambda (x)
(- x
(/ (g x)
((derive g) x)))))
(define (fixed-point f first-guess)
(define tolerance 0.00001)
(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 (newton-method g guss)
(fixed-point (newton-transform g) guss))
(define (zero-cubic a b c)
(newton-method (cubic a b c) 1))
练习1.41
>(define (double f)
(lambda (x) (f (f x))))
>(((double (double double)) inc) 5)
21
练习1.42
>(define (compose f g)
(lambda (x) (f (g x))))
>((compose square inc) 6)
49
练习1.43
(define (repeated f n)
(define (repe-iter g i)
(if (> i 1)
(repe-iter (lambda (x) (f (g x))) (- i 1))
;或(repe-iter (lambda (x) (g (f x))) (- i 1)) also works
g))
(repe-iter (lambda (x) (f x)) n))
练习1.44
(define (smooth f)
(lambda (x dx) (average (f (- x dx))
(f x)
(f (+ x dx)))))
(define (repeated f n)
(define (repe-iter g i)
(if (> i 1)
(repe-iter (lambda (x dx) (f (g x dx) dx)) (- i 1))
;或 (repe-iter (lambda (x) (g (f x))) (- i 1)) also works
g))
(repe-iter (lambda (x dx) (f x dx)) n))
(define (n-smooth f x dx n)
((repeated (smooth f) n) x dx))
练习1.45
(define (i-expt b n)
(define (iter-expt b n a k c)
(if (= n 0)
c
(cond ((< (- n (* 2 k)) 0) (iter-expt b (- n k) b 1 (* a c))) ;n=[may have some 0,may have some 1]1 or [must have some 1, may have some 0]0 (binary)
((= (- n (* 2 k)) 0) (iter-expt b 0 b 0 (* a a c))) ;n=1[all 0] (binary)
(else (iter-expt b n (* a a) (* 2 k) c)))))
(iter-expt b n b 1 1))
(define (repeated f n)
(define (repe-iter g i)
(if (> i 1)
(repe-iter (lambda (x) (f (g x))) (- i 1)) ;(repe-iter (lambda (x) (g (f x))) (- i 1)) also works
g))
(repe-iter (lambda (x) (f x)) n))
(define (average-damp f)
(lambda (y) (/ (+ y (f y)) 2)))
(define (fixed-point f first-guess)
(define tolerance 0.00001)
(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 (nth-root x nth k)
(fixed-point (repeated (average-damp (lambda (y) (/ x (i-expt y (- nth 1))))) k) 1))
练习1.46
(define (iterative-improve good-enough? improve)
(lambda (guess)
(if (good-enough? guess)
guess
((iterative-improve good-enough? improve) (improve guess)))))
(define (sqrt2 x)
(define (g? gs)
(< (abs (- (square gs) x)) 0.001))
(define (imp gs)
(/ (+ gs (/ x gs)) 2))
((iterative-improve g? imp) 1))
(define (fixed-point2 imp first-guess)
(define tolerance 0.00001)
(define (g? gs)
(< (abs (- gs (imp gs)))
tolerance))
((iterative-improve g? imp) first-guess))
(define (sqrt3 x)
(fixed-point2 (lambda (y) (/ (+ y (/ x y)) 2)) 1))