如果一种语言具有控制结构和变量,但不支持数组,列表,内存访问和分配等,那么它是否可以完成Turing?
也许,如果没有限制,你可以创建变量的量,可以通过像创建变量模拟数组array_1
,array_2
...... array_6000
通过他们和手动循环,并以某种方式创建复杂的数据结构和递归?
编辑:即使您不能通过名称操作访问变量(array_10+i
不允许)?
Dan*_*wak 17
当然.看看Lambda Calculus,这是我见过的最小的图灵完整语言之一.基本上,你所拥有的只是lambdas(函数文字); 没有任务,没有声明,没有数据结构.这一切都非常精简.
但是,您可以通过将函数链接在一起来模拟像List这样的线性数据结构.它变得非常冗长,但它肯定是可能的,它比拥有大量顺序命名的变量要好得多.
一般来说,语言是否为图灵完全与它是否具有数组无关.像SML和Haskell这样的函数语言缺少数组,就像Lambda Calculus一样,这些语言实际上是有用的语言!说一种语言是"图灵完成"仅仅是说没有图灵可计算函数的另一种方式,它不能用所述语言表达.这是一个令人惊讶的宽松资格,允许许多语言完全不切实际(如Lambda Calculus).
有很多图灵完整的语言,甚至没有"变量"的概念!内存访问和分配是实现细节,因此它们完全不相关.你必须意识到图灵机和图灵完整性是非常理论的概念,对于证明事物很有用,但完全脱离了实际硬件的现实.
Paul Graham写了一篇关于计算机语言历史的长篇但非常非常有趣的文章,他描述了计算机语言的两种截然不同的主要传统:
听起来你只知道第二种传统,但图灵的完整性是一个源于与第一传统相同的原则的概念,如果你不了解这些原则就没什么意义.