题
我已经创建了一个图灵完成编程语言(已经证明),因此它必须能够写 奎因 用它,对吗?
但是,所有quines我知道存放其源代码字符串中,然后换一个特殊的角色中使用的东西喜欢 chr
和 ord
.
我的语言只有下面
- 基本算术
- Int和类型字符串
- 变量
- ==operator
- 有条件的goto语句
我不知道我怎么可以写一奎因为我已经 没有真正的字符串操作供, 我只能输出不断串。然而,这是100%图灵完成。
解决方案
如果你有整数可以进行编码或解串(方案作为一个简单=1,B=2等。足够做到的那)。你只需要能够比较不断串或比较int。因此似乎没有根本性的问题。
你的工作与数字和写东西的喜欢
if (n == 1) print "A"
if (n == 2) print "B"
...
可能有一些实际困难。事情串不是,你有字中,但它们相当于非常大的数字。你需要什么这里是为有权访问无限的精确数字或某种阵列,固定的尺寸号码,或其他大型数据的结构。一系列的数字将为你做什么样的串可以做的。但是如果你的语言是图灵完成它应该有一个办法很容易地访问一些大块的记忆
图灵完整的语言局限于一个32位带(或在那里你必须给予新的名称,以每个不同的存储空间的32位)将是一大遗憾,不知道你可以写一奎因有这样的限制。通过这种方式,它想知道你如何证明你的语言是图灵完整的,如果你没有阵或相似的结构。共同的方法我通常使用的是实施一些图灵机的使用我的语言。但要做到这一点,我需要某种形式的阵来模拟的带。
这样的编码基本上是哥德尔有没有在它的定理incompletude,寻找一些方法进行编码的合乎逻辑的表达,作为整数,然后原因。
如果你提供一些更多的元件的语法,我们甚至可以尝试这样做的(如果你没有的功能,但只有goto语句,那也将是一个问题,但你也可以模拟)。基本的问题是,你必须找到一种"压缩"你的编码的源码。如果你有长串不断提供可能的帮助。
其他提示
如果你的语言是图灵完成,并有一个奎因,最有可能是无限多的人。这里有一个构造只是一些他们:
- 实现一个 >,[.>,]通过移动指针 (或其他一些简单的图灵完整的语言)解释在你的语言。写你的节目,这样的来源
X1<brainfuck source>Y1
时运行,解释>,[.>,]通过移动指针的程序。 - 写一个算法
string f(string a, string b)
在任何语言的选择,这当给予的任何a
和b
输出>,[.>,]通过移动指针的程序在运行产出的字符串a
, 整个>,[.>,]通过移动指针的源代码,然后串b
.你可以适应现有的>,[.>,]通过移动指针奎因做到这一点。 - 计算
f(X1, Y1)
然后嵌入所得>,[.>,]通过移动指针的节目进入你的节目从1.
第一个步骤是最困难的,但你可能已经完成,因为一个最简单的方法要证明的东西是图灵完成以实施翻译为另一种语言已经证明是图灵完成。
第二步是,被证明是可能的,已经并且是独立的程序的语言。
第三步是简单的计算。
显然,一个程序在编程语言是一串。一个输出的一个奎因的程序。
因此,一个输出的一个奎因是一串。如果你没有任何串操纵这是不可能写一个。
你应该编码你的节目数量(而不是简单虎门可读的文本编码),或实施串的操纵。