Sec1.1.2 命名和环境
介绍第一种特殊形式:define,也就是把名字与计算对象进行绑定。需要注意的是,在Lisp中,在同一个作用域中不能使用define对同一个名字重复绑定。在DrRacket中执行
(define s 2)
(define s 3)
会出错:
引用
module: duplicate definition for identifier in: s
也就是说,在Lisp中,define的作用非常纯粹。它所定义的变量(原文中就称为variable,但要注意与其他开发语言所说的可以多次赋值的变量不同)不负责跟踪状态的改变,而是专门为结构复杂或含义不清的计算对象提供一个使用方便,意义明确的名称。
这一节强调了“名字-值”绑定作为一种基本抽象手段的重要性。
程序设计语言中一个必不可少的方面,就是它需要提供一种通过名字去使用计算对象的方式。……
define是我们所用的语言里最简单的抽象方法,它允许我们用一个简单的名字去引用一个组合运算的结果。……实际上,构造一个复杂的程序,也就是为了去一步步地创建出越来越复杂的计算性对象。……这一特性鼓励了渐进式的程序开发与测试,并且导致了一个Lisp程序往往是由大量相对简单的过程组成的。
(救命啊~~ “This feature encourages the incremental development and testing of programs and is largely responsible for the fact that a Lisp program usually consists of a large number of relatively simple procedures.”在中文版中被译成“这种特征鼓励人们采用递增的方式去开发和调试程序。在很大程度上,这一情况也出于另一个事实,那就是,一个Lisp程序通常总是由一大批相对简单的过程组成的”。忍无可忍了,testing成了“调试”,什么叫“递增方式的调试”呀?is responsible for成了“出于另一个事实”,因果关系与原文完全相反。usually成了“通常总是”,这是中学语文的修改病句例题啊。)
同时,本节简单提及了,这些绑定关系被储存在一种称为“环境”的储存空间中,并且在一个计算过程中可能涉及到多个环境。关于“环境”将会在后续章节中详述。
Sec1.1.3 组合式的求值
作者在这里点明了整个第一章的一个目标:
“把与过程性思维有关的问题隔离(抽象)出来”。首先,是一般性求值过程:
1) 求值该组合式的各个子表达式。
2)将作为最左子表达式(运算符)的值的过程应用于相应的实际参数,所谓的实际参数也就是其他子表达式(运算对象)的值。
其中第一点体现了“递归”的概念(求值的定义中出现了对“求值”自身的需求)。因而
反复地应用第一个步骤,总可以把我们带到求值中的某一点,在这里遇到的不是组合式而是基本表达式,例如数、内部运算符或者其他名字。这种递归式的求值过程并称为
“树形积累”。
并且,文中强调了内部运算符的实际意义事实上与其他的绑定名字是一样的,由环境来决定:
环境所扮演的角色就是用于确定表达式中的各个符号的意义。在Lisp中,连“+”,“*”这样的基本运算符号也需要由环境来为其提供计算规则,有点像C++中的运算符重载,但计算规则不是与某个运算对象绑定,而是与表达式所在的环境绑定。
最后,文中提及了Lisp语法中的“特殊形式”,例如define等,
这些特殊形式有其自身的求值规则。并且(在页脚注释中)指出这些特殊形式
只不过是为那些完全可以采用统一形式描述的东西给出的另一种表面结构,通常称为“语法糖”(syntactic sugar)
分享到:
相关推荐
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
lisp--lisp-- 一个可以跑sicp解释器的lisp--。
NUS CS1101s SICP JavaScript 描述原文:协议:如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子。...下载Dockerdocker pull apachecn0/sicp-js-zhdocker run -tid
SICP-Python版本
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_notes SICP笔记和练习 资源 笔记 使用第一版,最高为ex 1.24。 从ex 1.31开始切换到第二版。
资源来自pypi官网。 资源全名:sicp-0.0.1b102.dev4.tar.gz
SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版
SICP_章_1-3 我对SICP第二版第1-3章的解决方案: 书中练习来自示例分配/ psets 项目位于 最后,来自考试
sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 download : https://github.com/wizardforcel/sicp-py-zh
资源分类:Python库 所属语言:Python 资源全名:sicp-0.0.1b102.dev6.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
在SICP上进行试用-> WASM编译演示:SICP如何将机器代码注册为WASM 为阶乘翻译LISP代码(define (factorial n) (define (iter product counter) (if (> counter n) product (iter (* counter product) (+ counter 1)))...