本节第一次讲到的scheme语法:;;基本表达式:逻辑表达式#t和#f,谓词<,>,=,复合运算符and,or,not;;条件判断表达式:(cond n个(<条件判断表达式> <操作表达式>));;运算方法:;;从第一个条件判断表达式开始查找,直到查找到条件判断表达式为真的表达式,执行其对应的操作表达式。;;条件判断表达式:(if <条件判断表达式> <操作表达式1> <操作表达式2>);;运算方法:;;若条件判断表达式为真则执行操作表达式1,否则执行操作表达式2。练习1.1:求对于每个表达式的输出结果10;;Value: 10(+ 5 3 4);;Value: 12(- 9 1);;Value: 8(/ 6 2);;Value: 3(+ (* 2 4) (- 4 6));;Value: 6(define a 3)(define b (+ a 1))(+ a b (* a b));;Value: 19(= a b);;Value: #f(if (and (> b a) (< b (* a b))) b a);;Value: 4(cond ((= a 4) 6) ((= b 4) (+ 6 7 a)) (else 25));;Value: 16(+ 2 (if (> b a) b a));;Value: 6(* (cond ((> a b) a) ((< a b) b) (else -1)) (+ a 1));;Value: 16练习1.2:将下面的表达式变为前缀形式(5+4+(2-(3-(6+4/5))))/(3*(6-2)*(2-7))(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) (* 3 (- 6 2) (- 2 7)));;Value: -37/150练习1.3:请定义一个过程,以三个数为参数,返回其中较大的两个数之和(define (PRoduce a b c) (cond ((and (< a b) (< a c)) (+ b c)) ((and (< b a) (< b c)) (+ a c)) ((and (< c a) (< c b)) (+ a b)) ))(produce 5 8 3);;Value: 13练习1.4:请仔细考察上面给出的允许运算符为复合表达式的组合式的求值模型,根据对这一模型的认识描述下面过程的行为(define (a-plus-abs-b a b) ((if (> b 0) + -) a b));;若参数b大于0,则运算符为+,运算结果为a+b,否则运算结果为a-b。练习1.5:若某个解释器采用的是应用序求值,Ben会看到什么样的情况?如果解释器采用正则序求值,他又会看到什么情况?请对你的回答做出解释(define (p) (p))(define (test x y) (if (= x 0) 0 y))(test 0 (p));;若解释器采用应用序求值:;;解释器在调用test时,优先求出参数的值,其中(p)会不断求值得到它自己,进入死循环。;;若解释器采用正则序求值:;;(test 0 (p))会展开为(if (= 0 0) 0 (p)),由于判断表达式(= 0 0)值为#t,将直接得到0而不会去求(p)的值。