很自然地可以发现:分支逻辑与循环逻辑其实都只有一个入口和一个出口,因此它们也自然可以作为顺序逻辑中的S…S,而不会破坏顺序逻辑的基本规则。更进一步,既然分支逻辑与循环逻辑是可被证明为正确的,并可以作为“顺序机器”本质所设定的顺序逻辑的一部分,那么由这些逻辑构成的“程序”也就必然是正确的。
这里的所谓正确,包括三个意思:一是程序能正确地描述人的思维;二是程序可以由机器正确地执行;三是机器执行的结果正确地符合人的思维的预期。不过这所有的“正确”仍然依赖两项前提:一是计算系统是一个“顺序机器”,二是在每一个用于计算的阶段(S…S,)中的数据,是确定的。
最后这一点——数据的确定性,正是顺序逻辑的必然结果:对于一个确定的逻辑而言,一个确定的输入,必有一个确定的输出。所谓输入与输出,若是数据,则在第一节中所述数据的内聚与外延的性质保障了这一结果;若是逻辑,则如上的形式化证明便保障了这一结果。
抽象是人们理解已知与未知事物的基本能力。例如你给旁边的同事甲介绍说:这段程序是张三写的啊。这时甲知道了“张三”,但并不知道张三的年龄身高、衣着打扮,所以这“张三”便是一个抽象。如果此时你把李四拉来旁边,说:不过这个人也出了些主意。这时,甲看到了活生生的,有年龄身高、衣着打扮的一个具象的人,却不知道这个人是李四。
抽象与具象是我们对事物的全部认识。只有当你指着那个人说“这是李四”的时候,同事甲才能把一个具象与抽象联系起来。所以事实是我们作为具象存在,而又用抽象来表明自己存在。这既构成了我们的人类世界,也同样构成了我们的计算世界。而这样的关系,在程序中不过是一行代码:var aNum = 0在此前的讨论中,我们说aNum是一个标识,上述代码声明了aNum的两项性质:它是变量,它指代数据0。从抽象的标识aNum,到它作为具象的上述两项性质,我们事实上已经看到了(并非物理上的)计算系统的绝大部分构成。无怪乎Dijkstra说:“人们一旦了解在程序设计中如何使用变量,他就掌握了程序设计的精华。”
【二】yipindushu.com
但是在这一行代码中,除了表达上述两项性质所必须的内容之外,还有一个“等号”(=)。在不同的语言中,这个等号可能存在两种含义①:其一,它是仅仅叙述0与aNum之间的指代关系;其二,它表示将0这个值存放到aNum这个标识所指示的存储(cells)。
一些语言中的等号同时包含上述两个含义,另一些却只有其中一个含义。而我们知道,一个标识——例如符号“=”仅仅是一个抽象。那么上述观点是说:语言在等号上的抽象含义并不相同。
①事实是可能存在无限种的含义。为了简化我们的讨论,我们这里只讨论常见的两种,即aNum与0之间存在赋值关系的情况。至于将“=”用作等值比较运算等类似情况,我们暂不讨论。
拿这三种可能含义之一——“表示将0这个值存放到aNum这个标识所指示的存储(cell)”来讲,这是一个具体的行为,它表明计算机器的各个部件间配合完成的一个操作,即运算单元将一个数0置入存储单元。从人的角度来看,这类似于我们向机器(包括运算单元与存储单元)发送了一个命令“aNum = 0”,于是机器就执行了这一命令。
这就是“命令式”计算范式的基本抽象。
版权声明
本站素材均来源与互联网和网友投稿,欢迎学习分享
【节数以及对数据的性质的思考4:http://www.yipindushu.com/xuexifangfa/16558.html
推荐文章
09-03
1 2025最哲理的句子哲理语句09-13
2 正能量语录大全,让心灵充满阳光01-04
3 柳州函授成人学习方法09-03
4 青年哲理语录哲理句子12-08
5 成人英语高效学习方法