今天算是把《计算机程序的构造和解释》的第一章看完了,讲述的是过程的抽象构造,最大的收获是更深层次的理解抽象的应用,过程的层次抽象。高阶函数的实现确实对此等的过程抽象的把握做到了显式的表达。下面是一个过程抽象实现:
;f(x)=x求解函数不动点
(define tolerance 0.00001)
(define (fix_point f first_guess)
(define (close_enough? v1 v2)
(< (abs (- v1 v2)) tolerance))
(define (try guess)
(newline)
(display guess) ;show the testing number
(let ((next (f guess)))
(if (close_enough? guess next)
guess
(try next))))
(try first_guess))
;过程作为返回值
(define (average_damp f) ;procedure 'f' use as procedure 'average_damp's variable
(lambda (x) (average x (f x))))
;求导数
(define (deriv g)
(lambda (x) (/ (- (g (+ x dx)) (g x)) dx)))
(define dx 0.00001)
((deriv cube) 5)
;Newton for fixed point g(x)=0 -> x|->f(x) fixed point
(define (newton_transform g)
(lambda (x) (- x (/ (g x) ((deriv g) x)))))
(define (newton_method g guess)
(fix_point (newton_transform g) guess))
;更为一般的过程,描述不动点、变换(newton等)
(define (fix_point_of_transform g transform guess)
(fix_point (transform g) guess))
(define (sqrt_1 x);平均阻尼下求y|->x/y的不动点
(fix_point_of_transform (lambda (y) (/ x y))
average_damp
1.0))
(define (sqrt_2 x)
(fix_point_of_transform (lambda (y) (- (square y) x))
newton_transform
1.0))