您的位置:首页 > 其它

SICP学习笔记 - 第一章 (1.1)

2012-10-30 11:09 211 查看
语言的三个机制:

基本表达式 (primitive expression)

组合 (combination)

抽象 (abstraction)

组合式:由括号括起的一些表达式,形成的表。表中最左边的元素称为运算符(operator),其他元素称为运算对象(operand)。

过程定义的一般形式:(define (<name> <formal parameters>) <body>)

应用序(application order):求值参数而后应用

正则序(normal order):完全展开而后归约

特殊形式(special form):

(define (<name> <formal parameters>) <body>)
(cond (<p1> <e1>)
(<pn> <en>))
(if <predicate> <consequent> <alternative>)
(and <e1> ... <en>)
(or <e1> ... <en>)
(not <e>)


部分习题:

exercise 1.3

(define (square-sum-of-two x y z)
(+ (square (max x y))
(square (max z
(min x y)))))


exercise 1.5

(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))
(test 0 (p))


在应用序求值中,解释器会先对各个子表达式求值。在对(p)求值时就会陷入无限循环。而正则序会先展开而后归约,(test 0 (p)) 会先展开成 if 的特殊形式,再根据 if 的求值规则:谓词部分先求值,根据谓词结果选择子表达式,这样正则序求值会返回0.

exercise 1.6

Lisp使用应用序求值,而new-if不是一个特殊形式,求值过程中会不断对子表达式求值形成无限循环。

exercise 1.7

没想明白改变值相对于猜测值的比率应该怎么表示,暂时用改变值和猜测值的差代替。

(define (sqrt x)
(define (good-enough? guess)
(< (abs (- guess (improve guess))) 0.0001))
(define (improve guess)
(/ (+ guess
(/ x guess))
2))
(define (sqrt-iter guess)
(if (good-enough? guess)
guess
(sqrt-iter (improve guess))))
(sqrt-iter 1.0))


exercise 1.8

(define (cube-root x)
(define (good-enough? guess)
(< (abs (- guess (improve guess))) 0.0001))
(define (improve guess)
(/ (+ (/ x
(square guess))
(* 2 guess))
3))
(define (cube-root-iter guess)
(if (good-enough? guess)
guess
(cube-root-iter (improve guess))))
(cube-root-iter 1.0))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: