SICP 习题 (2.1.4)拓展练习——初论

来源:互联网 发布:淘宝客怎么拉人进qq群 编辑:程序博客网 时间:2024/06/15 17:02

我只讨论练习2.15和2.16,前面的较简单。
2.15和2.16不能孤立的看,首先我们想想这个所谓区间运算的实质是什么?
没错,集合
我们重新定义加法
对于集合AB
定义C=A+B为一切x+y构成的集合(其中xAyB
减法,乘法,除法类似
也容易定义C=f(A,B)为一切f(x,y)构成的集合(其中xAyB
考察R=11/R1+1/R2,可以认为R=f(R1,R2),而f(x,y)=1x1+y1
自然对于R=R1R2R1+R2,可认为R=g(R1,R2),而g(x,y)=xyx+y
当然因为电阻都是正数所以fg可以认为是相等的

这时再回头看看Alyssa P.Hacker定义的区间运算,发现对于后一种运算,她是分开算的,即先算R1R2,再算R1+R2,最后将两个相除。
在看看其对于区间的运算,容易发现,在分开算的过程中,R1R2时的变量和算R1+R2时的变量不同
也就是说Alyssa P.Hacker的程序在算R=R1R2R1+R2的时候不是R=g(R1,R2),而是R=g1(R1,R2)g2(R1,R2),其中g1(R1,R2)=R1R2g2(R1,R2)=R1+R2
如此若定义h=g1g2,则h就只能是:
h(x,y,z,w)=g1(x,y)g2(z,w)x,zR1,y,wR2
这样算出来的R当然是不真确的了,故而可以回答2.15,正确
至于2.16,第一问已经由上面解答
第二问可以回答:即使可以做到算术闭包,也必须使用户将要算的东西写成表达式,之后程序在对表达式求结果(简单地说就是不能像windows自带的计算器那样可以先按5/2得2.5在2.5*3,只能一次给出表达式然后直接得到一个联系于这个表达式的结果)

0 0
原创粉丝点击