题目
我的答案
; 练习 1.1101283619#f416616
复制代码
练习 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 应该就会知道这是正则序求值。
评论