本節第一次講到的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)的值。