- 内容提要
- 序 1:程序里的世界
- 序 2:最后一层表象
- 关于本书
- 致谢
- 引言:简单的本源
- 篇一:计算系统
- 第 1 章 数,以及对数据的性质的思考
- 第 2 章 逻辑
- 第 3 章 抽象
- 篇二:语言及其面临的系统
- 第 4 章 语言
- 第 5 章 从功能到系统
- 篇三:程序设计的核心思想
- 第 6 章 数据结构:顺序存储
- 第 7 章 数据结构:散列存储
- 第 8 章 执行体与它在执行过程中的环境
- 第 9 章 语法树及其执行过程
- 第 10 章 对象系统:表达、使用与模式
- 篇四:应用开发基础
- 第 11 章 应用开发的背景与成因
- 第 12 章 应用开发技术
- 第 13 章 开发视角下的工程问题
- 第 14 章 应用程序设计语言的复杂性
- 篇五:系统的基础部件
- 第 15 章 分布
- 第 16 章 依赖
- 第 17 章 消息
- 第 18 章 系统
- 篇六:系统的基本组织方法与原理
- 第 19 章 行为的组织及其抽象
- 第 20 章 领域间的组织
- 附一:主要编程范式 及其语言特性关系
- 附二:继承与混合,略谈系统的构建方式
- 附三:像大师们一样思考——从 UML 何时死掉 谈起
- 附四:VCL 已死,RAD 已死
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2.3 我们要记住:Dijkstra 说他只讨论了 顺序机器 上的正确的逻辑
我们已经触及到计算系统的构成,以及在这样的计算系统上正确计算的诸多要素。一些看起来很明显的要素包括:数、数据(标识、值)和正确的逻辑描述,另一些不太明显的要素包括:算、思维方法和确定性。
Dijkstra 接下来用顺序逻辑统一了分支与循环逻辑,使之成为“顺序机器”上的最基本的 正确的逻辑描述 。他说明,我们可以从形式上将上述三种逻辑表示为图 1 所示的图形。
图 1 三种逻辑表示
很自然地可以发现:分支逻辑与循环逻辑其实都只有一个入口和一个出口,因此它们也自然可以作为顺序逻辑中的S1…Sn,而不会破坏顺序逻辑的基本规则。更进一步,既然分支逻辑与循环逻辑是可被证明为正确的,并可以作为“顺序机器”本质所设定的顺序逻辑的一部分,那么由这些逻辑构成的“程序”也就必然是正确的。
这里的所谓正确,包括三个意思:一是程序能 正确地描述 人的思维;二是程序可以由机器 正确地执行 ;三是机器执行的结果 正确地符合 人的思维的预期。不过这所有的“正确”仍然依赖两项前提:一是计算系统是一个“顺序机器”,二是在每一个用于顺序计算的阶段(S1…Sn)中的数据,是确定的。
最后这一点——数据的确定性,正是顺序逻辑的必然结果:对于一个确定的逻辑而言,一个确定的输入,必有一个确定的输出。所谓输入与输出,若是数据,则在“第 1 章 数,以及对数据的性质的思考”中所述数据的内聚与外延的性质保障了这一结果;若是逻辑,则如上的形式化证明便保障了这一结果。
- 艾兹赫尔•戴克斯特拉(Edsger Wybe Dijkstra),荷兰计算机科学家,结构程序设计之父。1972 年图灵奖获得者。本书对 Dijkstra 的观点的引用,均出自《结构程序设计》的第一篇,即“结构程序札记”。于此,后文中不再复述。 ↩
- Dijkstra 是用数学方法来证明分支与循环(和递归)逻辑的正确性,我们同样可以把这个证明过程看成一个映射关系,即上述逻辑可以视为思维方法在计算系统中的映射。 ↩
- Dijkstra 提到了抽象,但没有对抽象在逻辑证明中的作用给出类似的数学证明——尽管他事实上在后面(不太明显地)给出了一个抽象逻辑证明的实例。 ↩
- Dijkstra 并没有用同样的方法来证明顺序逻辑,而顺序逻辑正是图灵机的本质设定。因此,在 Dijkstra 的论证中,他强调“只讨论关于‘顺序机器’的程序”。 ↩
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论