SICP-练习2.1
2014-07-17 20:42
127 查看
【练习2.1】
请定义出make-rat的一个更好的版本,使之可以正确处理整数和负数。当有理数为正时,make-rat应当将其规范化,使它的分子和分母都是正的。如果有理数为负,那么就应只让分子为负。
【分析】
分子、分母的符号总共有四种情况:
1. 分子、分母都为正数,
2. 分子为负数,分母为正数。
这两种情况下,输入和输出的符号一致。
3. 分子、分母都为负数,
4. 分子为正数,分母为负数。
对于第3种情况:(-n) / (-d) = n / d
对于第4种情况:n / (-d) = (- n) / (- (-d)) = (- n) / d
这两种情况,输入的分子和分母恰好和输出的分子分母符号相反。
【Lisp代码】
请定义出make-rat的一个更好的版本,使之可以正确处理整数和负数。当有理数为正时,make-rat应当将其规范化,使它的分子和分母都是正的。如果有理数为负,那么就应只让分子为负。
【分析】
分子、分母的符号总共有四种情况:
1. 分子、分母都为正数,
2. 分子为负数,分母为正数。
这两种情况下,输入和输出的符号一致。
3. 分子、分母都为负数,
4. 分子为正数,分母为负数。
对于第3种情况:(-n) / (-d) = n / d
对于第4种情况:n / (-d) = (- n) / (- (-d)) = (- n) / d
这两种情况,输入的分子和分母恰好和输出的分子分母符号相反。
【Lisp代码】
(define (make-rat n d) (if (< d 0) (cons (- n) (- d)) (cons n d)))
相关文章推荐
- 【SICP练习】42 练习2.1
- 【SICP练习】42 练习2.1
- 【SICP练习】37 练习1.42
- 【SICP练习】61 练习2.31-2.32
- 【SICP练习】77 练习2.48-2.49
- 【SICP练习】86 练习2.58
- 【SICP练习】99 练习2.75
- SICP 练习1.17
- 【SICP练习】117 练习3.44
- SICP 练习1.38 寻找e的值
- 【SICP练习】134 练习3.65
- 【SICP练习】152 练习4.8
- 算法导论第二版习题试解-第二章练习2.1
- 【SICP练习】89 练习2.62
- 【SICP练习】90 练习2.63
- 【SICP练习】80 练习2.52
- 【SICP练习】26 练习1.32
- 【SICP练习】115 练习3.41
- 【SICP练习】101 练习2.77-2.78
- 【SICP练习】8 练习1.12