多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 过程做为参数 示例 ``` #lang racket ;; 计算啊到b的各整数之和 (define (sum-interagers a b) (if (> a b) 0 (+ a (sum-interagers (+ a 1) b)))) ;; 整数立方的和 (define (sum-cubes a b) (if (> a b) 0 (+ (* a a) (sum-cubes (+ a 1) b)))) ;;计算序列之和 (define (pi-sum a b) (if (> a b) 0 (+ (/ 1.0 (* a (+ a 2))) (pi-sum (+ a 4) b)))) ;;可以总结出抽象公式 ;; template: ;;(define (<name> a b) ;; (if (> a b) ;; 0 ;; (+ (<term a>) (<name> (<next> a )b)))) (define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b )))) ;; 重新计算求和 (define (sum-interagers1 a b) (define (inc n) (+ n 1)) (define (identiry x) x) (sum identiry a inc b)) (sum-interagers1 1 10) ;; 重新计算立方和 (define (sum-cubes1 a b) (define (inc n) (+ n 1)) (define (sube n) (* n n n)) (sum sube a inc b )) (sum-cubes1 1 10) ;; 重新计算 pi-sum (define (pi-sum1 a b) (define (pi-term x) (/ 1.0 (* x (+ x 2))) ) (define (pi-next x) (+ x 4)) (sum pi-term a pi-next b )) (pi-sum1 1 10) ``` ## 用 ambda构造过程 `$ f(x,y)=x(1+xy)^2+y(1-y)+(1+xy)(1-y) $` `$ a=1+xy $` `$ b=1-y $` `$ f(x,y)=xa^2+yb+ab $` 方式一:辅助过程 ``` (define (f x y) (define (f-helper a b) (+ (* x (square a)) (* y b) (* a b))) (f-helper (+ 1 (* x y) (- 1 y)))) ``` 方式二: 使用lambda ``` (define (f x y) ( ((lambda (a b ) (+ (* x (square a)) (* y b) (( a b))) (+ 1 (* x y)) (- 1 y))))) ``` 方式三:使用 let ``` (define (f x y) (let ((a (+ 1 (* x y))) (b (- 1 y))) (+ (* x (square a)) (* y b) (* a b)))) ``` let的一般形式 ``` (let ((<var1> <exp1>) (<var2> <exp2>) ... (<varn> <expn>)) <body>) ``` 也可以让 let 整体作为计算 ``` ;; 假设x=5 ;; let 中的x 赋值3 ;; 推导出结果为 33+5=38 (+ (let ((x 3)) (+ x (* x 10))) x) ``` ## 过程的作为一般性方法 ``` ;; 计算不动点 ;; 数x称为函数∫的不动点,如果x满足方程∫(x)=x。对于某些函数,通过从某个初始猜测 ;; 出发,反复地应用f ;; f(x),f(f(x)),f(f(f(x))),... ;; 直到值的变化不大时,就可以找到它的一个不动点 (define (fixed-point f first-guess ) (define tolerance 0.0001) (define (enough? x y) (< (abs (- x y)) tolerance)) (define (try guess) (let ((next (f guess))) (if (enough? guess next) next (try next)))) (try first-guess)) ;; 请cos 的不动点 ;; -> 0.7390547907469174 (fixed-point cos 1.0) ;; 求 y=sin y+cos y 的一个解 ;; -> 1.2586974741689445 (fixed-point (lambda (y) (+ (sin y) (cos y))) 1.0) ```