#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
sicp-mit-3
于 2022-01-23 11:56:15 首次发布