目录
十七、计算理论
在之前的章节中,我们把计算机看成一台问题求解机器。在这一章中,回答一些诸如此类的问题:哪些问题可以通过计算机解决?语言之间是否存在优劣?运行一个程序前,是否可以确定该程序会停止还是一直运行?
17.1 简单语言
我们可以仅用三条语句来定义一种语言,它们是:递增语句、递减语句和循环语句。在该语言中,只能使用非负整数数据类型。这里不需要其他数据类型,目标仅仅是说明计算理论中的一些思想。该语言只使用少数几个符号。
17.1.1 简单语句的威力
可以证明只使用这三种简单语句的简单程序设计语言和我们现在使用的任何一种复杂语言一样强大(虽然效率上不一定)。下面演示如何模拟当今流行语言中的一些语句。
1. 简单语言中的宏
我们把每次模拟称为一个宏,并且在其他模拟中使用时不需要再重复其代码。一个宏是高级语言中的一条指令,它等价于相同语言中的一条或多条指令的特定集合。
其他宏:显然我们需要更多的宏使简单语言与高级语言相匹配,建立其他宏是可能的,但是并不简单。
2. 输入和输出
在简单语言中,read X 语句可以使用 来模拟,我们也可以模拟输出,即假定程序中使用的最后一个变量保存将要打印的数据。简单语言不是实际语言,而是仅仅用来证明计算机科学中的一些定理。
17.2 图灵机
图灵机是1936年由Alan M. Turing提出用来解决可计算问题的。它是现代计算机的基础。我们将用一个非常简单的版本来说明它是如何工作的。
17.2.1 图灵机的组成部件
图灵机由三部分组成:磁带、控制器和读写头。
1. 磁带
虽然现代计算机中使用的随机存储设备的容量是有限的,但是我们假定图灵机中的内存是无限的。磁带任何时候只能保存一系列顺序字符,该字符来自计算机所能接收的字符集中。假设图灵机只能接收两个符号:空白(b)和数字1,并且图灵机处理正整数,如下图。