第一节:构造过程抽象
第一节:构造过程抽象
0、计算机科学的本质,在于对解决问题的方法的一套规范性的形式化的描述。
1、语言的基本元素
基本表达形式:表达最简单的个体。
组合的方法:把简单的东西构造成复杂的元素。
抽象的方法:为复合对象命名,并把它当做单元进行操作。
2、表达式求值:
先求值表达式中的各个子表达式,再把最左边的运算符的过程作用于相应的实际参数。
在这个过程中应用的是代换模型(这一点会被后来第三章提出的环境模型否定,不是实际上的工作模型)
同时这又引申出两种求值顺序或者说方法:一是应用序,即上面所提到的求值表达式的方法,可以简单表述为:先求值后应用。还有另一种求值方法:正则序求值:先不求出运算对象的值,直到实际需要值的时候再代入。可以简单表述为:完全展开然后归约。可以证明的是,如果表达式合法,两种求值顺序得到的结果是一样的。。
3、递归与迭代
首先从计算产生的过程来看,对于线性递归,计算过程会逐渐膨胀,到边界后再缩减回去直到边界条件。有点像一个正态曲线。而对于迭代,其通过维护状态变量来迭代,其表现出来的“形状”是一条直线,直到到达边界条件、这是很大的一点不同。
同时还可以从另一个角度理解:当一个程序中断后,迭代保存了当前的状态,可以再次重新进行计算。但对于递归,中断的时候就丢失了其“推迟执行的链条”,不能继续计算。
需要注意的是递归计算过程与递归过程的概念。递归过程论述的是一个事物的定义是递归的,在定义的时候引用了自己本身。要实现递归过程可以采用递归计算过程(只是一种递归的方法),当然也可以采用其他方法。
对于线性递归,其时间复杂度往往正比于延迟操作链条的长度;对树形递归,一般时间复杂度正比于树中的节点数,空间复杂度正比于最大深度。
4、高阶函数抽象
这一部分是本章的核心。其实质在于,过程是一种参数,能够应用于过程;同时过程也可以是返回的值,被一个过程返回。说着很简单。但这给程序的编写带来了更大的灵活度。同时也反映了书上的一个观点:过程和数据没有本质区别。要真正理解这一点,最好还是看一下书上的习题。
注:本章是由于博客数据库部分内容丢失,后面补充的。细节不够多。当做一个概要就好了吧。
哇!这个知识真的对我很有用呢!贴主能加个WX吗qaq
唐完了::(汗)