第一章
1、任何强有力的语言都包括以下三点:
- 基本的表达形式
- 组合的方法
- 抽象的方法
2、程序设计需要处理的两类要素:过程(操作数据的规则描述)、数据
3、组合式
组合式
(+ 5 6) +为运算符,5、6为运算对象
>> 11
(+ (\ 6 2) 9)
>> 12
4、过程定义的一般形式
过程定义的一般形式:(define (函数名 形式参数) (函数体))
(define (f x) (* x x))
(f 5)
>> 25
(f (+ 6 2))
>> 64
(f (f 5))
>> 625
(define (sum x y) (+ (f x) (f y)))
(sum 5 6)
>> 61
(define (division x y) (/ (sum x y) (f x)))
>> 2.44
5、代换模型
代换模型:
(define (f x) (* x x))
(define (sum x y) (+ (f x) (f y)))
(sum 5 6)
可规约成:(+ (f 5) (f 6))
还可规约成:(+ (* 5 5) (* 6 6))
最后可规约成:(+ 25 36)
>>61
6、应用序、正则序
正则序(先完全展开后规约)
(define (f x) (* x x))
(define (sum x y) (+ (f x) (f y)))
(sum 5 6)
(+ (f 5) (f 6))
(+ (* 5 5) (* 6 6))
(+ 25 36)
>> 61
应用序(先求值参数后应用)
(define (f x) (* x x))
(define (sum x y) (+ (f x) (f y)))
(sum 5 6)
(+ (f 5) (f 6))
(+ 25 36)
>> 61
7、条件表达式
条件表达式一般形式:
(cond ((> x 0) x)
((< x 0) (- x))
((= x 0) 0)))
例1:
(define (abs x)
(cond ((> x 0) x)
((< x 0) (- x))
((= x 0) 0)))
例2:
(define (abs x)
(cond ((< x 0) (- x))
(else x)))
例3:
(define (abs x)
(if (< x 0)
(- x)
x))
(abs 5)
>> 5
(abs -6)
>> 6
(abs 0)
>> 0
三个复合运算符:
与 (and <e1>...<en>)
或 (or <e1>...<en>)
非 (not <e1>...<en>)
8、牛顿逐步逼近法求平方根
(define (sqrt-iter guess x)
(if (good-guess? guess x)
guess
(sqrt-iter (improve guess x)
x)))
(define (good-guess? guess x)
(< (abs (- (square guess) x)) 0.001))
(define (improve guess x)
(average guess (/ x guess)))
(define (average x y)
(/ (+ x y) 2))
(define (square x)
(* x x))
(define (sqrt x)
(sqrt-iter 1.0 x))