全部学习汇总: GitHub - GreyZhang/g_SICP: learn SICP and hack lisp.
本来想标记几个关键词出来,但是发现不是很好标记。这一段的描述意思其实还是很清晰的,前面章节中看过一个求解不动点的设计。最终的设计,转换方程其实是作为数据传入到了不动点的求解过程中。这样,整个设计其实是忽略了转换本身的具体细节,而是关注于他们的共同操作,也就是不动点的求解。类似的,数据的处理也可以做相应的区分。把数据本身的表达以及相应的处理进行拆分,这样的设计抽象就是数据抽象。
这是关于有理数的加减乘除以及相等判断的实现,从开篇到现在,或许这算得上是最简单的一部分代码了,没有什么去分析的必要,继续往下看。
这里遇到一个emacs折腾时候遇到的老朋友,cons。有点python中list的感觉。
这里需要注意下,可以参照python list append的概念来理解。z进行组合的时候不是组合的拆散的对象,而是把x y作为一个整体进行处理。
有这样的表达方式就很容易利用来实现有理数的表述构建,但是在验证基础的运算的时候能够看出来其实这里面还有一点改进的空间。而改进的方式可以通过分子分母同时除以两者的最大公约数来实现,这个在前面的章节中已经实现过。
这样,增加了最大公约数约数的实现方式如上。这个过程,修改的是数据的构建过程而不需要修改其他的任何操作。



