Answers:
这是最简单的解释:
Turing Complete系统是指可以在其中编写将找到答案的程序的系统(尽管无法保证运行时或内存)。
因此,如果有人说“我的新事物是图灵完成”,这意味着原则上(尽管通常不是在实践中)可以用来解决任何计算问题。
有时候这是个玩笑...一个人在vi中编写了Turing Machine模拟器,因此可以说vi是世界上唯一需要的计算引擎。
这是最简单的解释
艾伦·图灵(Alan Turing)创建了一台可以接受程序,运行该程序并显示一些结果的机器。但是后来他不得不为不同的程序创建不同的机器。因此,他创建了可以使用任何程序并运行它的“通用图灵机”。
编程语言类似于那些机器(尽管是虚拟的)。他们接受程序并运行它们。现在,一种编程语言称为“图灵完成”,前提是该程序语言可以在给定的时间和内存的情况下运行图灵机可以运行的任何程序(与语言无关)。
例如:假设有一个程序将10个数字相加。图灵机可以轻松运行此程序。但是现在想象一下,由于某种原因,您的编程语言无法执行相同的加法运算。这将使其变成“ Turing incomplete”(可以说)。另一方面,如果它可以运行通用图灵机可以运行的任何程序,那么图灵就完成了。
大多数现代编程语言(例如Java,JavaScript,Perl等)都具有图灵完整的功能,因为它们各自实现了运行程序所需的所有功能,例如加法,乘法,if-else条件,返回语句,存储/检索/擦除方式数据等等。
更新:您可以在我的博客文章中了解更多信息:“ JavaScript正在完成图灵化” —解释
来自维基百科:
以艾伦·图灵(Alan Turing)的名字命名的图灵完整性非常重要,因为到目前为止,先进的计算设备的所有合理设计都可以通过通用图灵机进行仿真,这一发现已被称为Church-Turing论文。因此,原则上可以充当通用图灵机的机器可以执行任何其他可编程计算机能够执行的任何计算。但是,这与为计算机编写程序所需的工作,计算机执行计算所花费的时间或计算机可能具有的与计算无关的任何功能无关。
虽然真正具有图灵能力的计算机在物理上很可能是不可能的,因为它们需要无限的存储空间,但是图灵的完整性通常被松散地归因于物理计算机或编程语言,如果它们具有无限的存储空间,它们将是通用的。从这个意义上说,所有现代计算机都是图灵完备的。
除了说“画图完整意味着'在足够的时间和空间下能够回答可计算的问题'”之外,我不知道您怎么能做到非技术性的。
图灵完整的语言是可以执行任何计算的语言。该教会图灵论文指出,任何可执行的计算可以通过图灵机来完成。一个图灵机是无限的随机存取存储器和有限的“程序”一台机器使然,当它应该读,写,和跨存储器移动,当它应该具有一定的成绩结束了,什么应该做的下一步。图灵机的输入在启动之前已放入其内存中。
图灵机能够根据它认为在内存中的决策 - “语言”,只有支持+
,-
,*
,和/
对整数不是图灵完成,因为它不能使基于其输入一个选择,但图灵机多能。
Turing机器可以永远运行 -如果我们使用Java,Javascript或Python并取消了执行任何类型的循环,GOTO或函数调用的功能,那么Turing机器就不可能完整,因为它无法执行任意计算永远不会完成。Coq是一个定理证明者,不能表达不终止的程序,因此它不是图灵完整的。
Turing机器可以使用无限内存 -一种与Java完全一样的语言,但是一旦它使用了超过4 GB的内存就将终止,因为Turing机器可以使用无限内存,因此该语言不会成为Turing完整的语言。这就是为什么我们实际上不能构建图灵机的原因,但是Java仍然是图灵完整的语言,因为Java 语言没有限制,可以防止其使用无限内存。这是正则表达式未完成图灵的原因之一。
图灵机具有随机访问内存 -仅允许您通过内存进行操作push
并且pop
对堆栈的操作无法完成图灵的语言。如果我有一个“语言”,它只能读取一次字符串,并且只能通过从堆栈中压入和弹出来使用内存,那么它可以通过在看到时压入并在看到时弹出来告诉我(
字符串中的每个字符串)
以后是否都有自己的内存。但是,它不能告诉我每个人以后是否都有自己的名字,每个人以后是否都有自己的名字(请注意,满足此条件但不满足)。图灵机可以使用其随机存取存储器来跟踪(
)
(
)
[
]
([)]
([]]
()
和[]
是单独的,但是只有堆栈的这种语言不能。
图灵机可以模拟任何其他图灵机 -当图灵机具有适当的“程序”时,可以采用另一图灵机的“程序”并在任意输入下对其进行仿真。如果您使用的语言禁止实现Python解释器,那么Turing并不是完整的。
如果您的语言具有无限的随机访问内存,条件执行和某种形式的重复执行,则图灵可能已完成。还有更多异国情调的系统仍然可以实现Turing机器可以实现的所有功能,这也使它们的Turing更加完整:
cyclic tag system
不是特定的universal cyclic tag system
。因此,本文无法证明SQL Turing的完整性。(或者我误解了一些)
从根本上讲,图灵完备性是一个简洁的要求,即无限制的递归。
甚至不受内存限制。
我独立地想到了这一点,但是这里是对断言的一些讨论。我对LSP的定义提供了更多的上下文。
这里的其他答案没有直接定义图灵完备性的基本本质。
Turing Complete意味着它至少与Turing Machine一样强大。这意味着可以由图灵机计算的任何东西都可以由图灵完整系统计算。
没有人能找到比图灵机更强大的系统。因此,暂时说一个系统是Turing Complete就是说该系统与任何已知的计算系统一样强大(请参阅Church-Turing Thesis)。
我用简单的话理解:
图灵完成:一种可以进行计算的编程语言/程序就是图灵完成。
例如 :
您可以使用Just HTML加上两个数字吗?(答案是“ 否 ”,您必须使用JavaScript进行加法。)因此,HTML并非图灵完成。
Java,C ++,Python,Javascript,以太坊的Solidity等语言都是Turing Complete,因为您可以使用这种语言进行计算,例如将两个数字相加。
希望这可以帮助。
它是否可以测试和分支(具有“ if”),是否完整
Turing Complete意味着它至少与Turing Machine一样强大。
我认为这是不正确的,如果一个系统与Turing Machine一样强大,那么它就是Turing完整的系统,即该机器完成的所有计算都可以由系统完成,但系统完成的所有计算都可以由Turing机器完成。
用大多数程序员熟悉的实用语言术语来说,检测Turing完整性的通常方法是该语言是否允许或允许模拟嵌套的无边界while语句(与Pascal样式的语句相对,具有固定的上限)。
关系数据库能否输入地点和道路的纬度和经度,并计算它们之间的最短路径-否。这是一个表明SQL尚未完成图灵的问题。
但是C ++可以做到,并且可以解决任何问题。就是这样。