习题1.1-1.5
- 习题1.1
1 ]=> 10
;Value: 10
1 ]=> (+ 5 3 4)
;Value: 12
1 ]=> (- 9 1)
;Value: 8
1 ]=> (/ 6 2)
;Value: 3
1 ]=> (+ (* 2 4) (- 4 6))
;Value: 6
1 ]=> (define a 3)
;Value: a
1 ]=> (define b (+ a 1))
;Value: b
1 ]=> (+ a b (* a b))
;Value: 19
1 ]=> (= a b)
;Value: #f
1 ]=> (if (and (> b a) (< b (* a b)))
b
a)
;Value: 4
1 ]=> (cond ((= a 4) 6)
((= b 4) (+ 6 7 a))
(else 25))
;Value: 16
1 ]=> (+ 2 (if (> b a) b a))
;Value: 6
1 ]=> (* (cond ((> a b) a)
((< a b) b)
(else -1))
(+ a 1))
;Value: 16
- 习题1.2
1 ]=> (/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5)))))
(* 3 (- 6 2) (- 2 7)))
- 习题1.3
1 ]=> (define (<= x y) (or (< x y) (= x y)))
;Value: <=
1 ]=> (define (sumoftwobigger x y z)
(cond ((and (<= x y) (<= x z)) (+ y z))
((and (<= y z) (<= y x)) (+ x z))
((and (<= z x) (<= z y)) (+ x y))))
;Value: sumoftwobigger
1 ]=> (sumoftwobigger 1 2 3)
;Value: 5
1 ]=> (sumoftwobigger 4 2 5)
;Value: 9
根据http://sicp.readthedocs.org/en/latest/chp1/3.html的说法,该题翻译有误,应该是求最大两个数的平方和,上面答案略做更改即可。
- 习题1.4
如果b为正数,则条件表达式中取“+”号,使a+b,否则条件表达式取“-”,使a-b。
- 习题1.5
如果解释器为应用序求值,(p)会在 test处展开,因此进入死循环。如果解释器是正则序求值,则(p)会在最后求值,但是在if中选择了求0值,故不会求(p)的值。这里http://sicp.readthedocs.org/en/latest/chp1/5.html解释更加详细。