博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scip程序解释
阅读量:7266 次
发布时间:2019-06-29

本文共 2244 字,大约阅读时间需要 7 分钟。

SCIP | SCIP程序解释 - 博客园

Part1 Bulding Abstraction with Procedure

本类blog主要对SICP书中的程序进行说明。

#+STARTUP:** Example:Square Roots by Newton's Method#+BEGIN_SRC scheme#lang racket(define (sqrt-iter guess x)  (if (good-enough? guess x)      guess      (sqrt-iter (improve guess x)                 x)))(define (improve guess x)  (average guess (/ x guess)))(define (average x y)  (/ (+ x y) 2))(define (good-enough? guess x)  (< (abs (- (square guess) x)) 0.000001))(define (abs x)  (cond ((> x 0) x)        ((= x 0) 0)        ((< x 0) (- x))))(define (square x)  (* x x))(define (sqrt x)  (sqrt-iter 1 x))#+END_SRC** Procedures as Arguments#+BEGIN_SRC scheme#lang racket;;Page 60(define (sum term a next b)  (if (> a b)      0      (+ (term a)         (sum term (next a) next b))))(define (inc n) (+ n 1))(define (cube x) (* x x x))(define (sum-cubes a b)  (sum cube a inc b))(define (identity x) x)(define (sum-integers a b)  (sum identity a inc b))(define (integral f a b dx)  (define (add-dx x) (+ x dx))  (* (sum f (+ a (/ dx 2.0)) add-dx b)     dx))#+END_SRC** Finding roots of equations by the half-interval method#+BEGIN_SRC scheme#lang racket;;neg-point pos-point是指这个函数运行后的值是正还是负所对应的点(define (search f neg-point pos-point)  (let ((midpoint (average neg-point pos-point)))    (if (close-enough? neg-point pos-point)        midpoint        (let ((test-value (f midpoint)))          (cond ((> test-value 0)                 (search f neg-point midpoint))                ((< test-value 0)                 (search f midpoint pos-point))                (else midpoint))))))(define (average x y) (/ (+ x y) 2))(define (close-enough? x y)  (< (abs (- x y)) 0.001));;这里针对不同点位的情况进行了分类(define (half-interval-method f a b)  (let ((a-value (f a))        (b-value (f b)))    (cond ((and (< a-value 0) (> b-value 0))          (search f a b))          ((and (> a-value 0) (< b-value 0))           (search f b a))          (else           (error "Values are not of opposite sign" a b)))));;使用lambda表达式的好处就是用一个通用的表达式即可,而不需要反复不断的定义新的变量名字;;如果要使用新的(half-interval-method)过程,可以做如下的定义(half-interval-method (lambda (x) (- (* x x x) (* 2 x) 3)) 1.0 2.0)#+END_SRC
View Code

 

posted on
2019-03-02 00:38 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/leopoldsunny/p/10459495.html

你可能感兴趣的文章
BZOJ 2342: [Shoi2011]双倍回文 马拉车算法/并查集
查看>>
WCF会话(Session)与实例(Instance)管理
查看>>
iPhone/iPad被停用怎么办 3招轻松解锁
查看>>
UIView动画下
查看>>
转:delphi 删除指定文件夹下所有文件
查看>>
(救星啊)im-switch -s ibus错误:Error: no configuration file "ibus" exists.
查看>>
IE8+兼容经验小结
查看>>
wpf 模拟3D效果(和手机浏览图片效果相似)(附源码)
查看>>
[转载]Xamarin.Android实现下拉的刷新功能
查看>>
年轻人少走弯路的十大忠告
查看>>
C++ classics
查看>>
数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
查看>>
YASKAWA电机控制(2)---调试
查看>>
git init 与 git init --bare 的区别
查看>>
JAVA单链表的实现-不带头结点但带有尾指针
查看>>
【转】ARM交叉编译工具链
查看>>
ehci符合USB2.0,uhci,ohci,
查看>>
SimPholders2 模拟器 App 文件路径查看工具
查看>>
获取设备和 App 信息
查看>>
页面位置
查看>>