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