博主头像
zzh

ワクワク

第一节:构造过程抽象

第一节:构造过程抽象

0、计算机科学的本质,在于对解决问题的方法的一套规范性的形式化的描述。

1、语言的基本元素

基本表达形式:表达最简单的个体。

组合的方法:把简单的东西构造成复杂的元素。

抽象的方法:为复合对象命名,并把它当做单元进行操作。

2、表达式求值:

先求值表达式中的各个子表达式,再把最左边的运算符的过程作用于相应的实际参数。

在这个过程中应用的是代换模型(这一点会被后来第三章提出的环境模型否定,不是实际上的工作模型)

同时这又引申出两种求值顺序或者说方法:一是应用序,即上面所提到的求值表达式的方法,可以简单表述为:先求值后应用。还有另一种求值方法:正则序求值:先不求出运算对象的值,直到实际需要值的时候再代入。可以简单表述为:完全展开然后归约。可以证明的是,如果表达式合法,两种求值顺序得到的结果是一样的。。

3、递归与迭代

首先从计算产生的过程来看,对于线性递归,计算过程会逐渐膨胀,到边界后再缩减回去直到边界条件。有点像一个正态曲线。而对于迭代,其通过维护状态变量来迭代,其表现出来的“形状”是一条直线,直到到达边界条件、这是很大的一点不同。

同时还可以从另一个角度理解:当一个程序中断后,迭代保存了当前的状态,可以再次重新进行计算。但对于递归,中断的时候就丢失了其“推迟执行的链条”,不能继续计算。

需要注意的是递归计算过程与递归过程的概念。递归过程论述的是一个事物的定义是递归的,在定义的时候引用了自己本身。要实现递归过程可以采用递归计算过程(只是一种递归的方法),当然也可以采用其他方法。

对于线性递归,其时间复杂度往往正比于延迟操作链条的长度;对树形递归,一般时间复杂度正比于树中的节点数,空间复杂度正比于最大深度。

4、高阶函数抽象

这一部分是本章的核心。其实质在于,过程是一种参数,能够应用于过程;同时过程也可以是返回的值,被一个过程返回。说着很简单。但这给程序的编写带来了更大的灵活度。同时也反映了书上的一个观点:过程和数据没有本质区别。要真正理解这一点,最好还是看一下书上的习题。

注:本章是由于博客数据库部分内容丢失,后面补充的。细节不够多。当做一个概要就好了吧。

第一节:构造过程抽象
https://zzhygs.cn/index.php/archives/28/
本文作者 zzh
发布时间 2024-09-13
许可协议 CC BY-NC-SA 4.0
已有 2 条评论
  1. 评论头像

    哇!这个知识真的对我很有用呢!贴主能加个WX吗qaq

    zzh‘s Father September 14th, 2024 at 08:19 pm 回复
    1. 评论头像

      唐完了::(汗)

      dfs September 14th, 2024 at 08:20 pm 回复
发表新评论