图灵机模型符合直观但是不容易联系到具体的计算上,我从递归函数的角度来说一下。
首先我们有三种基本的函数:
- 零函数:
- 后继函数:
- 投影函数:
然后我们有三种操作:
- 函数组合:
- 原始函数递归:
,
- 极小化:如果对任意的自然数
,存在自然数m使
,并且
是使
最小的
(如果找不到那在这一点上
没有值),那
是通过把
极小化得到的。
这三种函数通过前两种操作组合出来的所有函数被称为原始递归函数(primitive recursive function),原始递归函数+极小化组合出来的函数叫偏递归函数(partial recursive function,参考 读《The Little Schemer》时,看到第9章有partial function和total function两个概念,不是特别懂,请赐教?)。图灵机和偏递归函数等价,一个语言如果是图灵完备的,那这个语言可以完全模拟这三种函数+三种操作。如果一门语言只能模拟原始递归函数,那你就无法写出无限循环。想想单片机、服务器、操作系统,如果没有无限循环跑起来该有多痛苦,这就是为什么通用编程语言都要图灵完全的原因。
顺便一提,图灵机是我们已知能实现的最强的计算模型。最近媒体经常报道的量子计算机仍然是图灵机,只是特定算法快一些。
顺便二提,根据Kleene正规型定理,任意偏递归函数都可以由原始递归函数经过一次极小化得来,所以写程序的时候如果发现两层以上的无限循环要格外小心,很可能逻辑是错的。