`
chelsea
  • 浏览: 117849 次
  • 来自: ...
社区版块
存档分类
最新评论

Essential SICP Primer

    博客分类:
 
阅读更多

综述

本书以Lisp语言本身为例,完整而辨证的讲述了“计算机程序”的各种形而上形而下的问题:

  • 程序语言本身的要素(原语、组合手段、抽象手段)

  • 程序的计算模型(代换模型、环境模型,迭代、递归)

  • 程序的世界观(对象式、函数式)

  • 程序如何繁殖进化(元语言抽象)

  • 程序如何执行(编译、解释)

同时阐述了程序设计中常用的几大关键技术:

  • 寄存器与堆栈的使用(目前多数计算机的基本抽象)

  • 数据导向与通用型计算(涉及高阶过程,数据与过程的统一)

  • 并发程序设计(模型与时序的冲突)

  • 历史记忆法(即缓存)

  • 应用序与正则序,及背后的惰性求值/延时求值方法论

  • 迭代与尾递归的转换

后两种看似只是一种优化技术,实际上不止如此,它们牵扯到程序的合法性,运行结果的可预期性

还有几种特殊的程序设计技术:

  • 模拟时间分叉的非确定性计算

  • 模拟逻辑推理的逻辑程序设计

  • 模拟数学公式的约束系统设计

一、语言要素

每一种强有力的语言都提供了三种机制:

  • 基本表达形式,用于表示语言所关心的最简单的个体

  • 组合的方法,通过它们可以从较简单的东西出发构造出复合的元素

  • 抽象的方法,通过它们可以为复合对象命名,并将它们当作单元去操作

二、数据与过程的统一

第一级元素的特权:

  • 可以用变量命名

  • 可以提供给过程作为参数

  • 可以由过程作为结果返回

  • 可以包含在数据结构中

Lisp给了“过程”完全的第一级状态,而一般而言,我们可以将数据定义为:

  • 一组适当的构造函数(必选)和选择函数(必选)及改变函数(可选)

  • 为使这些函数成为一套合法表示,它们就必须满足的一组特定条件

这样,数据与过程在Lisp中就完全统一了

三、并发、时间与通信

并发的基本现象是共享状态在不同进程间的同步,或迫使进程间通信所产生的事件按照某种特定的顺序进行;从本质上看,在并发控制中,任何时间概念都必然与通信有内在的联系;有意思的是,时间与通信之间的这种联系也出现在相对论里,在那里的光速(可能用于同步事件的最快信号)是与时间和空间有关的基本常量;在处理时间和状态时,我们在计算模型领域所遭遇的复杂性,事实上可能就是物理世界中最基本的复杂性的一种反映

四、对象模型与函数式模型

从一个复杂过程中的一部分的观点出发,其它的部分看起来正在随时间变化,它们有着隐蔽的随时间变化的局部状态;如果我们希望去写程序,在计算机里用某种结构去模拟现实世界中的这类自然分解,那么就会做出一些不是函数式的对象--它们必须随着时间不断变化;我们用局部状态变量去模拟状态,用对这些变量的赋值模拟状态的变化;在这样做的时候,就是在用计算执行中的时间去模拟我们所在的世界里的时间,也就是把“对象”弄进了计算机

用对象来做模拟是威力强大的,也很直观,这一情况的主要根源,就在于它非常符合我们对自己身处其中并与之交流的世界的看法;然而,正如我们已经反复看到的这种模型也产生了对于事件的顺序的依赖,以及同步多个进程的棘手问题;避免这些问题的可能性推动着“函数式程序设计语言”的开发,这类语言里根本不提供赋值或者变动对象,在这样的语言里,所有过程实现的都是它们参数上的定义良好的数学函数,其行为不会变化;物理世界中也有这样的例子,当我们观察一个正在移动的粒子时,我们说该粒子的位置(状态)正在变化,然而,从粒子的世界线的观点看,这里根本就不涉及任何变化

然而,如果我们贴近观察,就会看到与时间有关的问题也潜入了函数式模型中,原因在于函数式模型与时间无关的特性是将提供时态、时序的责任推给用户方实现的,当用户方无法提供时态时,又要重新引入函数式风格致力消除的同一个问题

我们可以将这一世界模拟为一集相互分离的,受时间约束的,有局部状态的,相互交流的对象,或者也可以将世界看作一个大函数,是单一的,无时间的,无状态的统一体;对象模型对世界的近似在于将其分割为独立的片断,函数式模型则不是沿着对象间的边界去做模块化。当对象间不共享的状态远远大于它所共享的状态时,对象模型就特别好用。这种对象观点失效的一个地方是量子力学,在那里将物体看作独立的粒子就会导致悖论和混乱。将对象观点和函数观点统一起来可能与程序设计关系不大,而是与基本认识论有关。每种观点都有其强有力的优势,但就其自身而言,又没有一种方式能够完全令人满意,我们还在期待着一个大统一的出现

五、元语言抽象与通用机器

这里的深刻思想是,任一求值器都能模拟其它的求值器;这样,有关“原则上说什么可以计算”的概念(忽略掉所有有关时间和空间的实践性问题)就是与语言或计算机无关的了;它反映的是一个有关“可计算性”的基本概念;这一思想第一次是由图灵阐述的;图灵给出了一种简单的计算模型--现在被称为图灵机--并声称,任何“有效过程”都可以描述为这种机器的一个程序;图灵而后实现了一台通用机器,即一台图灵机,其行为就像是所有图灵机程序的求值器

六、编译与解释

编译可以大大提高程序执行的效率,解释则为程序开发和排除错误提供了一个更强大的环境,因为被执行的源代码在运行期间都是可用的,可用去检查和修改,此外,由于整个基本操作的库都在那里,我们可以在排除错误的过程中构造新程序,随时把它们加入系统中;

由于看到了编译和解释的互补优势,现代程序开发环境很推崇一种混合的策略,使得解释性程序和编译性程序可以互相调用;这就使程序员可以编译那些自己认为已经排除了错误的部分,从而取得编译方式的效率优势,而让那些正在进行交互式开发和排错的,还在不断变化的程序部分的执行仍然维持在解释模式中;还可以使程序员根据实际问题选择最合适的语言

分享到:
评论

相关推荐

    sicp in python 中文 sicp 中文

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh

    SICP中文第二版

    SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版

    sicp 2.2.4节图形语言

    《SICP 2.2.4 节:图形语言》是计算机科学经典教材《结构与解释程序》(Structure and Interpretation of Computer Programs)中的一个重要章节,它深入介绍了如何利用编程来创建图形,以及如何设计和理解复杂的计算...

    SICP(python中文带书签)

    《计算机程序的构造与解释》(Structure and Interpretation of Computer Programs,简称SICP)是一本备受推崇的经典计算机科学教材,由Harold Abelson和Gerald Jay Sussman撰写,并由MIT出版社出版。这本书以其深入...

    SICP-Python版本

    SICP-Python版本

    SICP 解题集

    《SICP解题集》是一份专注于探讨和解答《结构与解释程序》(Structure and Interpretation of Computer Programs,简称SICP)一书中习题的资源。SICP是计算机科学领域的一本经典教材,由Harold Abelson、Gerald Jay ...

    SICP 使用的scheme解释器

    SICP 使用的scheme解释器 以前叫DrScheme

    SICP 习题答案

    《计算机程序的构造和解释》(SICP)是一本极具影响力的计算机科学教材,由Harold Abelson和Gerald Jay Sussman所著,MIT出版社出版。这本书以其深入探讨编程概念、程序设计方法以及计算机系统的工作原理而闻名。1-3...

    SICP习题解答,主要第一章的内容习题答案

    《SICP习题解答,主要第一章的内容习题答案》 SICP,全称《Structure and Interpretation of Computer Programs》(计算机程序的构造和解释),是计算机科学领域的一本经典教材,由MIT(麻省理工学院)的 Harold ...

    Python SICP epub版本

    Python SICP epub版本,很适合学习抽象的思想,用Python版本比lisp更实用

    SICP LISP AI

    《SICP》全称是《Structure and Interpretation of Computer Programs》,中文译为《计算机程序的构造和解释》。这是一本经典的计算机科学教材,由Harvard大学的 Harold Abelson 和 Gerald Jay Sussman 教授撰写,...

    a_book_sicp_py

    本书名为《a_book_sicp_py》,是一本以Python语言为基础介绍设计模式和计算机科学基础的书籍。根据描述和部分内容,可以提炼出以下知识点: 1. 编程语言的重要性:在计算机科学的宽泛领域中,编程语言扮演着至关...

    PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz

    标题中的"PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz"指的是从Python的官方包索引(Python Package Index,简称PyPI)上下载的一个名为"sicp"的软件包的版本号为0.0.1b102.dev4的压缩文件,其格式是tar.gz。...

    sicp-Structure and Interpretation of Computer Programs

    ### SICP——《计算机程序的结构与解释》 #### 一、概述 《计算机程序的结构与解释》(Structure and Interpretation of Computer Programs, 简称SICP)是一本由MIT电气工程与计算机科学系教授Harold Abelson和...

    北京大学,计算机程序构造和解释(SICP)课件,裘宗燕老师主讲

    《计算机程序构造和解释》(SICP,Structure and Interpretation of Computer Programs)是一本具有深远影响力的计算机科学教材,由Harold Abelson和Gerald Jay Sussman编写,MIT Press出版。这门课程由北京大学数学...

    sicp in python 中文版 sicp

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 download : https://github.com/wizardforcel/sicp-py-zh

    sicp 2016 from

    ### 结构与解释计算机程序 (SICP) #### 标题和描述中的核心知识点解析 **《结构与解释计算机程序》(Structure and Interpretation of Computer Programs, SICP)** 是由哈佛大学的 Harold Abelson 和麻省理工学院...

    sicp 2nd 英文chm

    《Structure and Interpretation of Computer Programs》(简称SICP)是计算机科学领域的一部经典教材,由Harold Abelson和Gerald Jay Sussman撰写,第二版(2nd Edition)通常被称为SICP 2nd。这本书是麻省理工学院...

    sicp第二章练习题的解答

    《SICP(Structure and Interpretation of Computer Programs)》是一本经典的计算机科学教材,由Harold Abelson和Gerald Jay Sussman所著,它强调了程序设计的基础和原理,特别是函数式编程思想。第二章主要探讨了...

Global site tag (gtag.js) - Google Analytics