批量图灵完成了吗?

时间:2012-06-20 19:12:05

标签: windows batch-file dos

我无法找到它是否是非常好奇 - 如果它没有资格,它缺少什么功能才能获得资格?我已经做了相当数量的批次,并没有看到任何明显的能力下滑。

2 个答案:

答案 0 :(得分:22)

通过批量创建一个brainfuck解释器,我已经'证明'批量完成了一次(因为brainfuck被证明是图灵完成的):

https://github.com/YoYoYonnY/Brainfuck-In-Batch

顺便说一句,图灵完整的编程语言意味着它:

  • 无法创建一个程序,可以确定是否另一个程序(使用相同语言)最终会停止或将继续运行(我不知道这个程序是如何工作的,我认为没有人使用过这个程序证明图灵的完整性。)
  • 可以创建一个程序,可以用语言运行所有可能的程序(解释器:Brainfuck interpreter in Brainfuck(有一个更好的版本,我很遗憾找不到。这个非常慢))
  • 可以像图灵机一样操作,因此包含至少以下方面:
    • 写入内存(即将变量值更改为任何其他值;只能将true更改为false,反过来仍然有效。对于批处理:{{ 1}})
    • '无限'内存(即你必须有多个位/字节也可以写,最好是无限多。字符串,数组,表,位域甚至只是整数都是有效的,只要我们可以写入整个对象。请注意,必须可以通过地址读取和写入变量:如果希望整数有效,必须有位移,并且必须能够为数组建立索引,所以类似于SET A=5 。)
    • 条件跳转语句(即array[index];(如果A为零则跳转到标签),IF %A%==0 GOTO LABEL(当var不为零时跳回到代码的开头)或while (var) {/*code*/}(跳转到如果堆栈上的当前值为零则退出))

传统的图灵机要求你有一个两边都是无限的磁带,但是一个简单的数组,字符串,表(对象)或二进制数(bitfield)也可以工作。例如,在我的“Brainfuck in Batch”中,我使用了一个数组/类似对象来存储内存(因为批处理允许您更改值的键,如下所示:jmp0 exit;

答案 1 :(得分:13)

我相信它有资格。图灵完整性的基本要求被认为可以简化为一些简单的操作,包括:存储状态(变量)的能力,分支(条件)的能力以及迭代(循环)的能力。批处理具有所有这些,因此除非对图灵完整性有一些尚未发现的要求,否则批处理脚本符合条件。