习题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解释更加详细。

posted on 2013-01-06 19:24  初级业余程序员  阅读(225)  评论(0编辑  收藏  举报

导航