批处理是否完成?

问题描述 投票:21回答:2

我找不到它,并且很好奇-如果它不符合条件,它缺少什么功能?我已经完成了相当数量的批处理,并且没有看到任何明显的能力下滑。

windows batch-file dos
2个回答
13
投票

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


25
投票

我刚刚通过批量创建一个Brainfuck解释器来证明批量已完成(因为事实证明Brainfuck已完成Turing的完整:]

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

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

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

传统的图灵机要求您的磁带两边都是无限的,但是简单的数组,字符串,表(对象)或二进制数(位域)也可以使用。例如,在我的“ Brainfuck批处理”中,我使用了类似数组/表的对象来存储内存(因为批处理允许您更改值的键,例如:SET ARRAY[%KEY%]=%VALUE%

© www.soinside.com 2019 - 2024. All rights reserved.