SICP CONCLUSION

让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 !

祝我能够突破层层代码,找到住在里计算机的神灵!

目录

1. 构造过程抽象
2. 构造数据抽象
3. 模块化、对象和状态
4. 元语言抽象
5. 寄存器机器里的计算

Chapter 2

  • 构造数据对象
练习答案

数据抽象引导

为什么程序需要复合数据?

  • 与我们需要复合过程一样:同样是为了提升我们子设计程序时所位于的概念层次,提高设计的模块性,增强语言的表达能力

数据抽象

  • 将那些如何处理数据的部分和数据如何表示分离

怎么去屏蔽数据的表示细节,从而实现更通用的操作呢?

(define (linear-combination a b x y)(+ (* a x) (* b y)))(define (linear-combination a b x y)(add (mul a x) (mul b y)))

什么是数据?

组成复合数据的关键思想

  • 在进行过程抽象时,我们隐藏了具体过程的实现细节,这个特定过程完全可以由另一个具有同样整体行为的过程取代,换句话说,我们可以这样造成一个抽象,它将这一过程的使用方式,与该过程究竟如何通过更基本的过程实现的具体细节分离

  • 而数据抽象也同理,也是屏蔽了具体实现和操作它分离,提供的抽象屏障应该是一组选择函数和构造函数

1.1 实例:有理数的算术运算

按愿望思维,假设我们已经有了一组有理数的选择函数和构造函数

(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))))(define (mul-rat x y)(make-rat (* (numer x) (numer y))(* (denom x) (denom y))))(define (div-rat x y)(make-rat (* (numer x) (denom y))(* (denom x) (numer y))))(define (equal-rat? x y)(= (* (numer x) (denom y))(* (numer y) (denom x))))

有理数的表示

接下来就应该是具体实现有理数的表示,而Scheme给我们提供构造复合数据的工具则是cons

(define (make-rat n d) (cons n d))(define (numer x) (car x))(define (denom x) (cdr x));;footnote -- alternative definitions
(define make-rat cons)
(define numer car)
(define denom cdr)(define (print-rat x)(newline)(display (numer x))(display "/")(display (denom x)))

1.2 抽象屏障

有关这个有理数实例的抽象层次,先是有理数的具体实现,到它的选择和构造函数,有理数的操作方法,到使用有理数的程序

把程序各个部分分成不同部分,并且把依赖性限制到少数的几个抽象屏障中,易维护,易修改,且灵活

1.3 数据意味着什么?

如果说是它由给定的选择函数和构造函数实现的东西,那么显然是不够的

书上给出一种解释,我们总可以把数据定义为一组适当的选择函数和构造函数,以及为这些过程是合法表示所需要满足的特特定条件

如果说这就是数据,那么是不是可以说在程序设计中处处都是数据呢?比如cons也是?

(define (cons x y)(define (dispatch m)(cond ((= m 0) x)((= m 1) y)(else (error "Argument not 0 or 1 -- CONS" m))))dispatch)(define (car z) (z 0))(define (cdr z) (z 1))

这小节的练习里主要还是锻炼数据抽象和完善它的能力

这一节里主要讲的还是怎样通过给出一组选择函数和构造函数去构建数据抽象,并且通过一层一层的抽象屏障,把程序的各个部分的依赖性降到最低,或许就是低耦合吧。再接着比较打破观念的就是数据究竟是什么?书上给出一种解释,我们总可以把数据定义为一组适当的选择函数和构造函数,以及为这些过程是合法表示所需要满足的特特定条件

转载于:https://www.cnblogs.com/secoding/p/10520830.html

SICP读书笔记 2.1相关推荐

  1. 【“计算机科学与技术”专业小白成长系列】SICP 读书笔记: The Elements of Programming

    SICP 读书笔记: The Elements of Programming 编程元素 强大的编程语言不仅仅是一种指示计算机执行任务的方法.语言也可以作为一个框架,我们可以在其中组织关于过程的想法.当 ...

  2. SICP读书笔记2---if和cond的区别

    1.比较形式上面的区别 (1)cond (cond (<p1> <e1>) (<p2> <e2>) ....... (<pn> <en ...

  3. SICP读书笔记 2.5

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  4. SICP读书笔记 3.5

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  5. SICP读书笔记 3.1

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  6. SICP读书笔记 2.3

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  7. SICP读书笔记(5) —— Sec1.1.2-Sec1.1.3

    [b][size=medium]Sec1.1.2 命名和环境[/size][/b] 介绍第一种特殊形式:define,也就是把名字与计算对象进行绑定.需要注意的是,在Lisp中,在同一个作用域中不能使 ...

  8. SICP学习笔记(1.1.4~1.1.5)

        SICP学习笔记(1.1.4~1.1.5)                                                                           ...

  9. Build Your Own Angularjs 读书笔记(AngularJS牛逼的地方在于它内嵌了一个表达式到Function对象的编译器。。。当然还有DI框架)

    Build Your Own Angularjs 读书笔记 目录 [隐藏] 1 项目配置 2 作用域 3 表达式与过滤器 4 模块与依赖注入 5 辅助函数 6 指令 项目配置[编辑] npm pack ...

最新文章

  1. 文献阅读方法 如何阅读英文文献 - 施一公(转)
  2. 1049 Counting Ones
  3. 使用coding、daocloud和docker打造markdown纯静态博客
  4. 【计算机网络】网络层 : BGP 协议 ( BGP 协议简介 | BGP 协议信息交换 | BGP 协议报文格式 | BGP-4 常用报文 | RIP 、OSPF、BGP 协议对比 )
  5. Linux双网卡NAT共享上网
  6. Leet Code OJ 26. Remove Duplicates from Sorted Array [Difficulty: Easy]
  7. PHP运行环境之IIS FastCGI 进程意外退出解决办法
  8. telnet或SQLplus下命令输入错误如何删掉重新输入
  9. Chapter 5 Blood Type——33
  10. php开发实例大全pdf百度云盘_互联网大厂 主要使用哪些开发语言
  11. K8S实战之环境部署1.18(一)
  12. JS 浏览器差异(IE和FF)
  13. 数据分析(Data Analysis)
  14. 请问如何制作中国象棋对弈软件的界面部分?
  15. 拼多多商家使用拼多多上传图片尺寸软件教程
  16. RuoYi-Vue 若依 新增子module模块,子模块的接口报404,以及自定义包名后如何确保正确扫描?
  17. openGL之API学习(七十)windows的opengl扩展wgl
  18. ios多人协作工具有哪些?支持多人同步在线使用的协同办公软件
  19. Heart Rate Variability Analysis with the HRV Toolkit: Basic Time and Frequency Domain Measures/背景
  20. 2023年华中科技大学新闻传播专硕考研上岸前辈备考经验指导

热门文章

  1. 几招就可轻松搞定证件照处理,还不快来码住!
  2. Linux的mask什么意思中文,mask是什么意思
  3. 广东省佛山市谷歌卫星地图下载
  4. SSL集训 2021.07.16 提高B组 T1 下棋【博弈论】
  5. 马士兵mysql_MYSQL相关总结(马士兵教育)
  6. 无关风月怎谈价格:个性化直播源码打造多功能一对一交友、直播程序功能
  7. FreeRTOS之软件定时器详解
  8. 九度 题目1457:非常可乐
  9. 让你流泪的不是毕业,而是无法再重走一次的青春
  10. Java ee 链接mysql 数据库完整步骤