[SICP]数据意味着什么?

《SICP•2.1  数据抽象简介·2.1.3数据意味着什么?》What Is Meant by Data?何谓数据、数据意味着什么?

这一节写得不易理解。yqj2065真的不知道作者为什么要这样写!

1.数据 Vs. 函数

从汇编语言开始,我们知道“正是这种简单的代码“MOV  AX,1234H”刻画出程序的最为底层的构造单元:指令和数据”。

按照命令式编程的观点,数据(data),也被称为操作数(operands)或数据值,是内存中保存的数值,随着语言的进步,数据形式/数据类型越来越丰富。例如Java中有数值如整数2、小数(浮点数)3.5,逻辑数据true、false、字符如' A '、'和'、字符串如"Java"以及各种各样的对象数据。

按照函数式编程的观点,数据(data)是被操作的对象,(+ 1 2)中1、2是操作数,(map (lambda (x) (* x *)) (list 1 2 3) )中,(lambda (x) (* x *))和(list 1 2 3)是操作数。

这仅仅说明,函数式编程中,函数是(能够作为)数据

但是Scheme不认识(2 + 1),因为2并不是函数。换言之,数据不都是函数。再怎样模糊,数据和函数仍然是有重大区别的。(我们把1、3.14等称为数据,再补充说明,函数可以作为操作数,一切不就太平了)

2.什么意思?

Exercise 2.6 we can get by without numbers!

“如果觉得将序对表示最为过程还不足以令人如雷灌顶,那么请考虑,在一个可以对过程做各类操作的语言中,我们完全可以没有数”——在函数式编程语言中,以λ运算构造一切是其立足点。以Scheme为例,在丘奇数的基础上,其语言可以完全没有数!(数字只不过是语法糖)。

这才是我最难以理解的地方。

丘奇数(Church numeral)是高阶函数,不难搞懂。2是一个数,命令式程序员给我两个苹果,函数式程序员敲响两次木鱼...我知道2就可以了,管你两个苹果还是两次操作。不是讲解数据的接口与数据的实现分离吗,为什么在“数据意味着什么?”标题下提到丘奇数。

假设Java中,我在(假设)《1.2Java数据类型1.2.1·int有多长》写到int有32位,然后在习题中给一个题目:“我们完全能够让int有64为长”。这就是我不理解的地方,因为我绝对不会这样写。

换言之,我会这样说:程序员们需要知道2是一个数,至于实现,可以用两个苹果或两次操作,例如在lambda运算中,一切都是lambda表达式!在这里2由lambda表达式定义,称为丘奇数2。(不知道这一节 是不是这个意思)

3.数据的接口与数据的实现

But exactly what is meant by data? It is not enough to say "whatever is implemented by the given selectors and constructors"。

这个问题“数据意味着什么?”,和随后的说明.....我知道其意思,但是解说得很炒蛋。我给你一个类A,你说它是分数还是复数还是什么数

class A{
    private  int num; //分子numerator
    private  int den = 1; //分母denominator    
    public int getNumerator(){return num;}
    public int getDenominator (){return den;}
    public A(){this(0);}
}

selectors and constructors,Java中你给出构造器和setter,你就要我知道它是什么数据抽象?当然不行,所以,需要add求和看出,嗯这是分数的求和,所以这是分数类。

然后,(按照Java来说),add这种“必须满足的一组特定条件”,不仅服务于类A这种“高层”定义,也符合int这种低层的东西,如int是32位,我们可以完全能够让int有64为长.....但是如果你用int来计算,你无法区分int有64为长还是32位...(哔哔哔哔)

数据抽象意味着什么?程序员按照数据类型的抽象特征思考和使用该数据,数据的实现不需要知道——有很多不同的实现方式。反正我是这样开始介绍数据抽象的。


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值