Sec 1.1 程序设计的基本元素
“这样,当我们描述一个语言时,就需要特别注意这种语言所提供的,将简单认识组合形成复杂认识的方法。每一种强有力的都为此提供了三种机制:
1. 基本表达形式 : 用于表示语言所关心的最简单的个体。
2. 组合的方式: 通过它们能从简单的元素出发构造出复合的元素。
3. 抽象的方法: 通过它们可以为复合元素命名,并将其看作单元来操作。
……
通俗来说,数据是一种我们希望去操作的“东西”,而过程是关于如何操作数据的规则的描述。这样,任何强有力的程序设计语言都必须能表述基本的数据和基本的过程,还需要提供对过程和数据进行组合和抽象的方法。”
以上三点,是如何从机制上(而不是概念上)去考察一个开发语言。概念上的“抽象”,事实上由上面的2,3两点共同在机制上支撑。这里的“抽象”机制强调了语言在组合其关心的元素时的
“闭包性质”(参考Sec2.2,注意这里所说的闭包是抽象代数中的闭包概念,而不是函数式编程中的闭包概念)。复合元素可以被命名并看作一个简单个体单元来处理,从而使用同样的一些组合方式构造出更为高层的复合元素。只有在对其元素(不论是过程还是数据)提供了这种具有“闭包性质”的组合方式,语言才得以“强有力”。自然,我们在设计或考察任何编程模型所提供的机制时,也应该从以上三个方面入手。
关于闭包性质的描述摘录如下:
一般说,某种组合数据对象的操作(在这里指“组合的方式”)满足闭包性质,那就是说,通过它组合起来得到的结果本身还可以通过同样的操作再进行组合。闭包性质是任何一种组合功能的威力的关键要素,因为它使我们能够建立起层次性的结构,这种结构由一些部件组成,而其中的各个部件又是由它们各自的部件组成,并且可以如此继续下去。……除了最简单的程序外,所有程序都依赖于一个事实:组合式的成员本身还可以是组合式。
(composition设计模式是“闭包性质”的一个典型例子)
需要注意的是,SICP书中说明(这么重要的一段话居然用小字注释写在页脚中……):
术语“闭包”来自抽象代数。在抽象代数里,一个由某些元素组成的集合称为在某个运算(操作)之下封闭,如果将该运算应用于这一集合中的元素,产生出的结果仍然是该集合中的元素。然而Lisp社区(很不幸地)还用术语“闭包”描述另一个与此毫不相干的概念:闭包也是一种表示“带有自由变量的过程”的实现技术。本书中没有采用闭包这一术语的第二种意义。
从这里也可以看出,sicp并不着眼于具体的函数式编程语言实现。但是(很纠结地),我在写后续章节的笔记时很需要用到“闭包”的第二种意义。为了行文流畅,现在暂定,在后续的笔记中,用“闭包”表示第一种意义,用“高阶函数的闭包”表示第二种意义。
Sec 1.1.1 表达式
介绍了“前缀表示”和“缩进”。需要注意的是,这种书写为“左括号+运算符+空格+运算对象+右括号”,并且会返回一个结果的表达式,称为“一般性求值”,是LISP中最基本最普遍的表达形式,其它的表达形式都被称为“特殊形式”,例如define形式,cond形式等等。(参考Sec1.1.3)。L
SICP书中所说“前缀表示”的两个优点感觉都没写到点子上(感觉可能是要卖个关子,后面再说)。统一使用前缀表示的最大优点是把表达式和函数调用在形式上统一起来了,大大提高了LISP的语言特征正交性,从而简化了语言。
所谓语言特征正交性,是指语言特征
“可以任意地组合使用,而且这些组合也都有意义;另一方面,一个特定特征的意义始终如一,无论与之组合的其他特征是什么。正交性这一术语出自线性代数里的正交向量。在一个正交向量集里的任何向量都独立于其他向量(不能用它们表示),而且对于描述整个向量空间而言,这一集合里的每个向量都是必须的。” (摘自《程序设计语言————实践之路(第2版)》,Michael L. Scott著,裘宗燕译)。
嗯,很难懂,因为这也是裘老师的译著,其最大特色是你为了看懂中文版必须拿著一本英文版对照着看,刚好我现在手头上没有……等找到了英文版再尝试改写一下……简单来说,正交性就是提倡语言的特性在设计上保持各自独立(一个特性在概念上不会和另一个特性有所重叠,例如传统的函数与表达式的区别就很暧昧,你可以有一个只包含一个函数的表达式,也可以有一个只对一个表达式求值的函数),并且其组合会产生有意义的新结果(而函数和表达式的组合还是表达式)。高度正交的语言特性可以保证语言的特性被简化为能支持其设计目标的最小特性集合(所谓的“这一集合里的每个向量都是必须的”)。当然,正交性不是语言设计的终极目标,很多不太追求正交性的语言也活得很好。但在设计语言(或任何编程模型)时适当考虑正交性可以避免引入过多繁杂而不灵活的特性。
分享到:
相关推荐
docker run -tid -p <port>:80 apachecn0/sicp-py-zh # 访问 http://localhost:{port} 查看文档 PYPI pip install sicp-py-zh sicp-py-zh # 访问 http://localhost:{port} 查看文档 NPM npm install -g sicp-py-zh ...
运用激光熔覆技术在AISI1045钢表面制备了30vol-% SiCp/Ni-Cr-B-Si-C涂层。SEM和TEM观察分析表明:SiCp在熔覆过程中完全溶解;涂层结合区组织为共晶结构;涂层组织由初生石墨球G,分布在γ-Ni固溶体枝晶中的M23(C,B)6...
为研究SiCP/Al-Fe-V-Si复合材料的热稳定性,对多层喷射沉积技术制备的SiC颗粒增强Al-Fe-V-Si合金经过不同温度下的热稳定性实验后进行了硬度检测,并对其显微组织进行了电镜观察。结果表明:随着基体合金材料中Fe含量的...
资源分类:Python库 所属语言:Python 资源全名:sicp-0.0.2-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
5. **数据结构**:SICP中涵盖了多种数据结构,如列表、树和图。lisp--需要提供这些数据结构的操作和构造。 6. **元编程**:Lisp语言的一个关键特性是其元编程能力,允许代码操纵自身。lisp--可能包含元对象协议...
### SICP——《计算机程序的结构与解释》 #### 一、概述 《计算机程序的结构与解释》(Structure and Interpretation of Computer Programs, 简称SICP)是一本由MIT电气工程与计算机科学系教授Harold Abelson和...
SICP-Python版本
NUS CS1101s SICP JavaScript 描述原文:协议:如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子。...下载Dockerdocker pull apachecn0/sicp-js-zhdocker run -tid
sicp备忘录 包含 SICP 每个部分的注释和答案。 请参考那些正在学习SICP的人。 笔记 如果你想在 gauch 中使用随机函数 (use math.mt-random) (define m (make <mersenne> :seed (sys-time))) (mt-random-integer m ...
CoRecursive Slack SICP研究小组 章节 1-1-1 ::表达式 1-1-2 ::命名与环境 1-1-3 ::评估组合 1-1-4 ::复合程序 1-1-5 ::程序应用的替代模型 1-1-6 ::条件表达式和谓词 1-1-7 ::例子:牛顿法求平方根 1-1-8 :...
sicp-in-python(中文版+英文版)PDF 背景. SICP 全称Structure and Interpretation of Computer Programs,翻译过来叫《计算机程序的构造和解释》使用python
sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh
《sicp-core》这个主题可能源自《Structure and Interpretation of Computer Programs》(简称SICP)这本经典的计算机科学教材。SICP是一本广泛赞誉的书籍,它深入介绍了计算机程序设计的概念和方法,尤其强调了如何...
《SICP笔记和练习》是一份详尽的资源,主要涵盖了由MIT教授们编写的经典计算机科学教材《Structure and Interpretation of Computer Programs》(简称SICP)的学习笔记和练习解答。这份资料以HTML格式呈现,便于在线...
标题中的"PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz"指的是从Python的官方包索引(Python Package Index,简称PyPI)上下载的一个名为"sicp"的软件包的版本号为0.0.1b102.dev4的压缩文件,其格式是tar.gz。...
SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版
本文将围绕"Sicp-eg-ex"这个项目,结合标题和描述,探讨在学习SICP过程中遇到的例子、笔记和习题解,特别是环境检查方案9.5的相关知识点。 首先,我们关注到的是"SICP课程视频示例"。SICP课程的核心在于通过实际的...
### SICP(计算机程序的结构与解释) #### 一、引言 《SICP》(Structure and Interpretation of Computer Programs),即《计算机程序的结构与解释》,是由Harold Abelson、Gerald Jay Sussman及Julie Sussman...