1、计算过程:程序控制数据做事的过程。
2、四川话是中国话的方言,Scheme是Lisp的方言,
3、Lisp的最大特点:过程可以作为数据,即过程=数据。编译器就是这样:将程序当做数据处理。
4、使用Lisp的好处:更好地学习数据的结构和程序的构造 ,以及两者的结合。
5、程序设计语言的组成:1、表达:数据(常量、变量)+过程(算数、逻辑、比较)
2、组合:利用括号(结构、分支、循环)
3、抽象:利用保留字来命名
6、Lisp预算符号的前缀:1.利于后面放置多参数。2.方便嵌套组合。
7、格式:统一级别、要运算的对象垂直对齐。
8、命名:让符号与整个过程(或数据)建立对应关系,这就是抽象的方法。而名字与数据过程的组合,走向更高层次的抽象。
9、环境:存储 符号——对象(数据、过程) 对应关系的地方。
10、lisp解释器如何对组合式求值:1.求子表达式的值。2.将左边的运算符带入这些值中求值。1、2递归
11、在求值递归的最低层情况:数值+名字(名字对应对象或者操作符)
12、特殊形式有专门的求值规则:如define 、def()
13、代换模型的计算过程:1.求子表达式的值 2.求左边运算符解释得到的过程 3.将值带入过程中
(适合用于人工推演的程序的执行过程)
14、应用的计算步骤:先求值,再带入
正常的计算步骤:先带入,再求值
15、Lisp条件表达式:(cond (<predicate><consequent expression>))
受限条件表达式:(if (predicate)(consequent)(alternative))
16、谓词(断言):返回TRUE or FALSE 的表达式(过程)
17、复合谓词:逻辑运算符可以构造复合的谓词。and/or/not
18、问题求解模型:1)列出需求。 2、找出最低层的需求,细化,实现 。3、然后将其镶嵌在上层需求中。
19、数学函数:描述这个事物的特点。
计算机科学函数:描述如何实现这个事物。
20、Lisp中的if表达式采用的是正常计算步骤(先带入,再求值),这样其中一个很难算(递归)的话,可以避免。而在练习1.6中自己构造的new—if,会按照Lisp解释器的先求值,在带入的方式,导致计算量剧增。
21、Black—box:在使用一个程序是不应该去想它是如何实现的。
使用计算机时你在想CPU里的逻辑门怎么构造吗?
做数学题用套用公式的时候不应该去想他是如何实现的。
拉屎的时候你想你肛门处肌肉细胞组织,并相互配合的会拉得更舒服吗?
22、形式参数:被约束在自己那一级的约束变量,且不能与同级的自由变量(全局变量)同名。
比如你在(define (sum a b c)
(defne add a d h)
在sum函数内部定义add函数不能用a做参数,a是自由变量。
局部名的必要性:让函数自己的参数不影响,更复杂,或者其他函数的构造。
23、块结构:为了实现一个功能我们会创造多个函数,而功能与功能相互之间的函数重名了怎么办?为了让这些同名可能不同作用的函数不相互干扰,我们将它们嵌套在自己功能的块结构里。
24、块结构的另一个好处:由于函数要层层嵌套成功能,则上层的一些参数,可以直接作用于内部的低层次的函数了,这些参数的作用域扩大了。