sicp-mit-3

#lang sicp
;;https://www.bilibili.com/video/BV1Xx41117tr
;;https://github.com/DeathKing/Learning-SICP/tree/master/SrtCN
;;第三节

;;心智的活动,除了尽力产生各种简单的认识之外,主要表现在如下三个方面:
;;1)将若干简单认识组合为一个复合认识,由此产生出各种复杂的认识。
;;2)将两个认识放在一起对照,不管它们如何简单或者复杂,在这样做时并不将它们合而为一。
;;   由此得到有关它们的相互关系的认识
;;3)将有关认识与那些在实际中和它们同在的所有其他认识隔离开,这就是抽象,
;;   所有具有普遍性的认识都是这样得到的。
;;---john locke

;要以递归的方式思考问题
;假如我知道某个简单情形的答案,就可以直接将其作为结果
;否则我就需要将这个问题简化,简化出一个子问题

;(define (sum-int a b)
;  (if (> a b)
;      0
;      (+ a (sum-int (1+ a) b)))) ;;这是子问题

;(define (sum-sq a b)
;  (if (> a b)
;      0
;      (+ (sqare a)
;         (sum-sq (1+ a) b))))

;无论何时,当要设计一个复杂的系统并且要弄明白它时,
;将问题拆分成尽量多的模块是很重要的,
;并且每一个模块要能够被独立的解释

(define (pi-sum a b)
  (if (> a b)
      0
      (+ (/ 1 (* a ( + a 2)))
         (pi-sum (+ a 4) b))))

;(define (<name> a b)
;  (if (> a b)
;      0
;      (+ (<term> a)
;         (<name> (<next> a) b))))

;给procedure命名
(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a)
         (sum term (next a) next b))))

;(define (sum-int a b)
;  (define (indentity x) x)
;  (sum indentity a 1+ b))


;(define (sum-sq a b)
;  (sum square a 1+ b))


(define (pi-sum2 a b)
  (sum (lambda (i)
         (/ 1 (* i (+ i 2))))
       a
       (lambda (i)
         (+ i 4))
       b))

;;iterative
(define (sum2 term a next b)
  (define (iter j ans)
    (if (> j b)
        ans
        (iter (next j)
              (+ (term j) ans))))
  (iter a 0))

;;过程可以被命名
;;数据也可以被命名
;;所以过程和数据都可以作为参数,在过程中传递


;squre函数
;y ---f---> (/ (+ y (/ x y)) 2);;如果y是猜测值,使用y来改进猜测值
;f也就是:f(根号x) = 根号x
;即找到f的不动点
;look for a fixed point of f


;求平方根,就是寻找不动点
;(define (sqrt x)
;  (fixed-point (lambda (y)
;                 (average (/ x y) y))
;               1))



;(define (fixed-point f start)
;  (define (inter old new)
;    (if (close-enough? old new)
;        new
;        (iter new (f new))))
;  (iter start (f start)))

(define (fixed-point f start)
  (define tolerance 0.00001)
  (define (close-enuf? u v)
    (< (abs (- u v)) tolerance))
  (define (iter old new)
    (if (close-enuf? old new)
        new
        (iter new (f new))))
  (iter start (f start)))

(define (sqrt x)
  (fixed-point
   ;;平均阻尼方法
   (average-damp (lambda(y)
                   (/ x y)))
   1))

(define avarage-damp
  (lambda (f)
    (lambda (x)
      (average (f x) x))))

(define (average-damp f)
  (define (foo x)
    (average (f x) x))
  foo)


;;牛顿法
(define (sqrt x)
  (newton (lambda (y)
            (- x (square y)))
          1))

;;by wishful thinking
(define (newton f guess)
  (define df (deriv f))
  (fixed-point (lambda (x)
                 (- x (/ (f x) (df x))))
               guess))


;;first, i start out with some mathematical idea
;;second, by wishful thinking

(define deriv
  (lambda (f)
    (lambda (x)
      (/ (- (f (+ x dx)) (f x))
         dx))))

(define dx 0.0000001)

;;;privilege 特权
;;;citizens 市民,公民
;;;incorporate 合并
;;;the rights and privileges of first-class citizens
;;;;;;to be named by variables ;;可以使用变量命名
;;;;;;to be passed as arguments to procedures
;;;;;;to be returned as values of procedures
;;;;;;to be incorporated into data structures




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值