2.1 数据抽象简介

《SICP?2.1  数据抽象简介》看得不爽,吐槽一下。

The basic idea of data abstraction is to structure the programs that are to use compounddata objects so that they operate on ‘‘abstract data.‘‘ 接口操作于抽象数据。

At the same time, a ‘‘concrete‘‘ data representation is defined independentof the programs that use the data. The interface between these two parts of oursystem will be a set of procedures, called
selectors and constructors, that implement theabstract data in terms of the concrete representation.不太懂这个interface的意思。

数据的具体表示与使用它的程序无关。selectors and constructors是数据的具体表示的实现工具,为什么看成这两部分的接口?

以分数为例:

好吧,封装上面的粘接剂,假设现在有(make-rat <n> <d>)、 (numer <x>)、 (denom <x>)。我们既不考虑分数如何表示,也不管上面的函数如何实现,我们wishful thinking(这个wishful thinking、单凭愿望/一厢情愿应该是幽默,合理假定):在上面的make-rat等函数基础上,设计了add-rat等+-*/方法….

晕,selectorsand constructors指make-rat、numer、denom?!

我很不喜欢这样的讲述。

【《编程导论(Java)·4.1.3 String》,首先说明:通常认为字符串需要的最小接口集应该包含5个方法,程序员仅使用最小接口集的5个方法,判断字符串是否有指定的前缀(并说明:实际上String类提供了boolean startsWith(Stringprefix)。最小接口集外,String提供了前缀后缀判断、改变大小写,更换字符、去掉无用空白trim()等大量便宜方法。)。】

的确,(make-rat<n> <d>)、 (numer <x>)、 (denom <x>)可以构成分数的最小接口,但是我一直把pair相关的3个通用函数cons、car、cdr认为是selectorsand constructors。晕,不纠结了。

另外,(参考上一节笔记)如果以make-rat、numer、denom为最小接口,那么可以确定该数据类型是分数,直接使用cons、car、cdr,我们仅仅是粘接数据。

注:接口(interface)是使用该方法的用户所需要知道的所有信息,包括方法头(方法原型)、和非常重要的说明文档。不管有没有写出说明文档,函数的用途是接口的一部分,因而make-rat是接口。虽然,

(define make-rat cons)

make-rat 和cons,是不同层面的东西。

所谓不同层面,SICP将它叫Abstraction Barriers,其实如《4.1.3 String》,最小接口集和便宜方法没有必要分两层。如果要细分,不知道可以搞出多少barriers。而且,每一种数据类型的最小接口集,很难界定。除非像SICP,把selectorsand constructors称为所有数据类型的最小接口集而且不特指cons、car、cdr(再次吐槽一下)。

简单地说,只有一层皮——接口。用户程序使用接口;接口的实现在内部使用cons、car、cdr。

What Is Meant by Data?目前没有看懂,what is the point?

数据(类型)由其接口界定,它们必须满足的一组特定条件,即最小接口集。

序对——构成数据类型的方式,你用cons或过程都可以,然后呢?

Exercise 2.6 we can get by without numbers!

哇!!!人是什么?在某个角落说明:人是一堆原子!!!

抽象出各种数据类型,便于程序员编程。但是本质上,函数语言的所有元素,都是通过最底层的λ表达式定义的。某种程度上,我们可以不定义任何数据、操作符而全部使用λ表达式直接编程(就如同直接使用01机器语言编程一样)。但是,我们需要抽象,比较cons其过程实现….

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-01 23:39:52

2.1 数据抽象简介的相关文章

Kafka简介

Kafka简介 在当前的大数据时代,第一个挑战是海量数据的收集,另一个就是这些数据的分析.数据分析的类型通常有用户行为数据.应用性能跟踪数据.活动数据日志.事件消息等.消息发布机制用于连接各种应用并在它们之间路由消息,例如通过message broker.Kafka是快速地将海量信息实时路由到消费者的解决方案,实现信息的生产者和消费者的无缝集成.它不会阻塞信息的生产者,同时信息生产者不会知道信息消费者. Apache Kafka是个开源的分布式消息发布订阅系统,具有以下特征: 消息持久化(per

OOA - OOD - OOP 简介

OOA - OOD - OOP 简介 一. OOA OOA : (Object-Oriented Analysis, 面向对象分析方法) . 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构化分析有较大的区别.OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析. OOA(面向对象的分析)模型由5个层次(主题层.对象类层.结构层.属性层和服务层)和5个活动(标识对象类.标识结构.定义主题.

图形数据库Neo4J简介

最近我在用图形数据库来完成对一个初创项目的支持.在使用过程中觉得这种图形数据库实际上挺有意思的.因此在这里给大家做一个简单的介绍. NoSQL数据库相信大家都听说过.它们常常可以用来处理传统的关系型数据库所难以解决的一系列问题.通常情况下,这些NoSQL数据库分为Graph,Document,Column Family以及Key-Value Store等四种.这四种类型的数据库分别使用了不同的数据结构来记录数据.因此它们所适用的场景也不尽相同. 其中最为特别的便是图形数据库了.可以说,它和其它的

Java集合容器简介

Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),AttributeList(1.5),RoleList(1.5),RoleUnresolvedList(1.5), ConcurrentLinkedQueue(1.5),ArrayBlockingQueue(1.5),LinkedBlockingQueue(1.5), PriorityQueue(1.5),

进程同步概念简介 多线程上篇(四)

进程同步概念 临界资源 一旦有对资源的共享,就必然涉及竞争限制 比如尽管有两个人去水井打水,但是水井却只有一个:合理安排的话刚好错开,但是如果安排不合理,那就会出现冲突,出现冲突怎么办?总有一个先来后到,等下就好了. 这个水井就是一个临界资源 临界资源用来表示一种公共资源或者说是共享数据,可以被多个线程使用. 但是每一次,只能有一个线程使用它,一旦临界资源被占用,其他线程要想使用这个资源,就必须等待. 当多进程访问临界资源时,比如打印机 假设A进程和B进程轮流获得CPU时间片执行,A打印数学,B

Android网络通讯简介

网络通信应该包含三部分的内容:发送方.接收方.协议栈.发送方和接收方是参与通信的主体,协议栈是发送方和接收方进行通信的契约.按照服务类型,网络通信可分为面向连接和无连接的方式.面向连接是在通信前建立通信链路,而通信结束后释放该链路.无连接的方式则不需要在通信前建立通信连接,这种方式不保证传输的质量. Android提供了多种网络通信的方式,如Java中提供的网络编程,在Android中都提供了支持.Android中常用的网络编程方式如下: 针对TCP/IP协议的Socket和ServerSock

微信红包的架构设计简介

@来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微信红包的架构,于是乎有了下面的文字(有误请提出,谢谢) 概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量. 微信的金额什么时候算? 答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储.. 采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低. 实时性:为什么明明抢到红包,点开后发现没有? 答:2014年的红包一点开就知道金额,分两次操作

JSON 简介

ylbtech-JSON: JSON 简介 JSON:JavaScript Object Notation(JavaScript 对象表示法) JSON是存储和交换文本信息的语法,类似 XML. JSON 比 XML 更小.更快.更易解析. JSON 实例 { "employee":[ {"firstName":"John","lastName":"Doe"}, {"firstName"

Docker简介

Docker简介 什么是Docker: 正所谓Docker的英文本意为"搬运工",所以在我们的世界里,可以理解为Docker搬运的是装满任意类型的APP的集装箱,开发者可以通过Docker将APP变成一种标准化的.可移动植的.自动管理的组件.它用一种新的方式实现了轻量级的虚拟机,专业术语成为应用容器(Application Container) Docker的优势: 1.利用率高 ·Docker对系统资源的利用率很高,一台主机可以同时运行数千个Docker容器 2.可以快速的交付应用程