张瑞峰的博客

导航

SICP 第一章练习题解

不是参考答案,只是自己的解,可能有谬误。

练习 1.1

10

12

8

3

6

a

b

19
(= a b ) #这个猜不出来是什么结果,运行一下发现是 #f

4

16

6

16

练习 1.2

(/ (+ 5 (+ 4 ( – 2 (- 3 ( + 6 (/ 4 5)))))) (* (- 2 7) (- 6 2) 3))

练习 1.3

(define (biggerTwo a b c)
  (if (< a b)
      (if (< a c)
          (+ b c)
          (+ a b))
      (if (< b c)
          (+ a c)
          (+ a b))))

练习 1.4

(define (a-plus-abs-b a b)
  ((if (> b 0) + -) a b))

上面的定义意思是如果 b 大于 0,那么 a + b,如果 b 小于 0,那么 a – b。所以结果就是 a 加上绝对值 b。因为运算符也可以当作组合式的普通的值,所以这样做是合法的。

练习 1.5

(define (p) (p))
(define (test x y)
  (if (= x 0)
      0
      y))
# 而后求值
   (test 0 (p))

上面的程序,如果解释器采用应用序求值,那么会短路,结果为0。

上面的程序,如果解释器采用正则序求值,那么会展开式子,导致陷入无限循环。因为求值 p 会递归会自身,而这个递归没有结束条件。

Comment is disabl

posted on 2021-02-20 17:30  张瑞峰的博客  阅读(57)  评论(0编辑  收藏  举报