题目
我的答案
; 练习 1.1
10
12
8
3
6
19
#f
4
16
6
16
复制代码
练习 1.2
; 练习 1.2
(/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5)))))
(* 3 (- 6 2) (- 2 7)))
复制代码
练习 1.3
; 1.3 这个题,中文书让返回较大的两数之和,英文书是两数平方之和
(define (sum-top-two x y z)
(if (> x y)
(+ x (if (> y z) y z))
(+ y (if (> x z) x z))))
; Exercise 1.3. Define a procedure that takes three numbers as arguments and returns the sum of the squares of the two larger numbers.
(define (sum x y z)
(define (bigger a b)
(if (> a b) a b))
(define (square x) (* x x))
(define (sum-of-squares x y)
(+ (square x) (square y)))
(if (> x y)
(sum-of-squares x (bigger y z))
(sum-of-squares y (bigger x z))))
复制代码
练习 1.4
恕我直言,这个函数名已经解释的很清楚了哇,a 加 b 的绝对值。
如果 b 是正数,最左的表达式 (if (> b 0) + -) 就得到 运算符 +, 结果就是 a + b ;
否则,表达式就是 - ,结果就是 a - b ;
a 加一个正数 b,或者 减一个负数 b 或 0, 都是 a + |b| 。
练习 1.5
应用序求值 先求值参数后应用,
正则序求值 完全展开而后归约,非必要不求值,
如果解释器采用的是应用序求值,执行(test 0 (p)) 时,(p) 被求值,(define (p) (p)) 不停的调用自己陷入死循环。
如果解释器采用的是正则序求值,执行到(test 0 (p)) 时,不求值,再到 if (= x 0) 返回 0,结束了,(p)没机会被调用。函数正常返回 0, Ben 应该就会知道这是正则序求值。
评论