《计算机程序的构造和解释》学习笔记——数据抽象

    “世界是复杂的,由简单的元素经过复杂的变化或者组合而成。”

    任何语言总要定义数个基本数据类型,它们是其他复合数据类型的基础。就像大千世界可以分解为有限的分子或原子,然后它们经过非常复杂的物化反应而产生色彩斑斓的多彩世界。复合就是一种抽象过程,根据描述对象的特点有目的、系统的抽象,抽象后的数据类型就可以作为更高一层次的操作“原子”,屏蔽了这个抽象数据的底层实现,使得程序更具表现力,也更容易理解。

    例如scheme定义了整数基本概念,+、-、*、/操作也是相对于整数的基本过程。现在某程序需要经行有理数运算,当然可以根据有理数的运算规则,分别用两个数分别表示有理数的分子和分母,然后利用整数的四则运行来进行有理数的运算。但是这种琐碎的过程给了程序员不必要的干扰,而且非常容易引入错误。自然就想要是有像整数运算那样的运算符能直接进行有理数的运算该多方便?

    假想中,应该有一个包含两个整数的数据结构来表示有理数,一个表示分子,一个表示分母。还有两个过程能分别取到这个数据结构的两个部分,也就是表示的有理数的分子和分母。基于上面的假设,有理数的四则运算就可以如下表示:

/*
*有理数四则运算
*/

( define ( add-rat x y )
    ( make-rat ( + ( * ( numer x ) ( denom y ) )
                   ( * ( numer y ) ( denom x ) )
               ( * ( denom x ) ( denom y ) ) ) )

( define ( sub-rat x y )
    ( make-rat ( - ( * ( numer x ) ( denom y ) )
                   ( * ( numer y ) ( denom x ) )
               ( * ( denom x ) ( denom y ) ) ) )
上面的代码定义了有理数的加减法add-rat和sub-rat,x、y表示两个有理数。为了实现有理数加减法,我们定义了三个接口函数分别是:make-rat、numer和denom。这三个接口函数屏蔽了底层细节,使得有理数四则运算过程不需要考虑数据结构的真正实现,而只需要根据已有的规则,利用这三个函数就能顺利实现。其中,make-rat带两个整数参数a、b,它返回的就是有理数(a . b),其中a表示分子,b表示分母;numer带一个有理数参数,它的作用就是提取出有理数的分子;denom与numer相似,提取分母。有理数乘、除和相等运算都可以利用这三个接口函数实现。但是这三个函数是我们假设的,还需要定义它们,肯定是基于scheme语言既有的机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值