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