写点什么

SICP 习题答案 1.1 - 1.5

用户头像
十元
关注
发布于: 2021 年 02 月 20 日

题目


我的答案

; 练习 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 应该就会知道这是正则序求值。


用户头像

十元

关注

还未添加个人签名 2018.09.26 加入

这人眼高手低 夸夸其谈

评论

发布
暂无评论
SICP 习题答案1.1 - 1.5