我只是想知道它是否100%可能,如果我的语言是图灵完整的,写一个打印出来的程序(当然不使用文件读取功能)
因此,如果语言只有真正必要的东西,以使其完整(我会证明通过将Brainf * ck代码翻译成它),如输出,变量,条件和gotos(地狱是的,得到的),我可以试着写一个quine吗?
我也在问这个问题,因为我不确定quin是否直接符合图灵定律,即图灵机能够执行任何计算任务。 我只想知道,所以我不会在不知道可能不可能的情况下尝试多年。
答案 0 :(得分:31)
任何编程语言 图灵完成,并且能够 输出任何字符串(由可计算的 函数的字符串作为程序 - 这是一个技术条件 满意每一个节目 存在的语言)有一个quine 程序(实际上,无限多 quine程序,和许多类似的 好奇心如下 定点定理。
答案 1 :(得分:5)
几个月前我遇到过这个问题。
虽然写一个quine并不一定证明一种语言是Turing Complete,但它是一个强有力的建议;)就图灵完整性而言,如果你能(如你所说)提供从你的语言到另一个语言的有效翻译图灵完整的语言,然后你的语言是图灵完成。
话虽这么说,任何可以输出字符串的Turing Complete语言都应该能够生成一个quine。另外,来自维基百科:
当执行环境被视为一个函数时,quine是执行环境的固定点。作为Kleene's recursion theorem的直接结果,Quines可以在任何能够输出任何可计算字符串的编程语言中使用。为了娱乐,程序员有时会尝试用任何给定的编程语言开发最短的quine。
答案 2 :(得分:4)
可以使用无法在其表示中打印所有符号的编程语言。例如,I / O可能限制为7位ASCII字符,语言关键字为阿拉伯语。这是我能想到的唯一例外。
答案 3 :(得分:2)
嗯,从技术上讲,并非总是如此。根据{{3}},编程语言必须是可接受的编号。实用且理智的Turing-complate编程语言都是可接受的编号。如果Turing-complate编程语言可以在该语言与另一个可接受的编号之间进行转换,则该语言是可接受的编号。
Turing-complete编程语言的示例,它不是可接受的编号:
源代码始终包含一个或两个双引号转义字符串。如果输入为空,如果有两个字符串则输出第一个字符串,如果有,则输出永久循环。否则,使用原始输入作为输入来评估Python中的最后一个字符串。
它不是一个可接受的编号,因为在Python程序中,我们必须知道输入为空时的行为,将其翻译成这种语言。但我们可能永远不会知道它是否是一个无限循环,因为我们无法解决停止问题。但我们知道翻译总是存在。
用这种语言编写quines是不可能的。