学习SICP,好好研究

今天算是把《计算机程序的构造和解释》的第一章看完了,讲述的是过程的抽象构造,最大的收获是更深层次的理解抽象的应用,过程的层次抽象。高阶函数的实现确实对此等的过程抽象的把握做到了显式的表达。下面是一个过程抽象实现:

;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))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值