2012-06-20 9 views

Respuesta

12

Creo que califica. Se cree que los requisitos básicos de la integridad de Turing se pueden reducir a unas pocas operaciones simples, que incluyen: la capacidad de almacenar estados (variables), la capacidad de ramificar (condicionales) y la capacidad de iterar (bucles). Batch tiene todo esto, por lo tanto, a menos que exista un requisito aún por descubrir para la integridad de Turing, el scripting por lotes califica.

+6

También señalaré que las personas logran hacer cosas completamente ridículas usando nada más que secuencias de comandos en lotes puros. : S – Wug

+1

Siento que hay algo más que esto. Una máquina de Turing no solo "almacena el estado", básicamente tiene una pila de dos extremos. Los FSM tienen versiones débiles de estado, bifurcación e iteración, y no son TC. Los PDA incluso tienen una pila y aún no son TC; se necesita un PDA con dos pilas para ser TC. –

15

acabo 'demostrado' por lotes es Turing completo, mediante la creación de un intérprete de brainfuck en lotes (brainfuck Porque se ha demostrado para ser Turing completo):

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

Por cierto, una de Turing completa significa su lenguaje de programación, ya sea:

  • imposible crear un programa que puede determinar si otro programa (en el mismo idioma) será finalmente detener o seguirá funcionando para siempre (no sé cómo funciona ésta, y yo no pienses que nadie e usé este para probar la integridad de Turing).
  • posible crear un programa que puede ejecutar todos los programas posibles en el idioma (Un intérprete:. Brainfuck interpreter in Brainfuck (Hay una versión mejor, que por desgracia no puedo encontrar Éste es terriblemente lento))
  • posible actuar como o simular una máquina de Turing, y por lo tanto contiene al menos los siguientes aspectos:
    • de escritura a la memoria (es decir, el cambio de un valor de la variable a cualquier otro valor; sólo ser capaz de cambiar true a false y al revés es sigue siendo válido. En el caso del lote: SET A=5)
    • memoria 'Infinita' (es decir también hay más de un bit/byte que puedes escribir, preferiblemente infinitos. Cadenas, matrices, tablas, campos de bits o incluso solo enteros son todos válidos, siempre que podamos escribir en el objeto completo. Tenga en cuenta que debe ser posible leer y escribir en una variable por dirección: debe haber bitshifts si desea que los enteros sean válidos, y debe poder indexar su matriz, por lo que es array[index];).
    • Salto condicional estados (es decir IF %A%==0 GOTO LABEL (Ir a etiqueta si a es cero), while (var) {/*code*/} (saltar de nuevo a comenzar de código mientras var no es cero) o jmp0 exit; (Ir a salir si el valor actual en la pila es cero))

La máquina de Turing tradicional requiere que tengas una cinta que sea infinita en ambos lados, pero una simple matriz, cadena, tabla (objeto) o número binario (campo de bits) trabajo tambien En mi "Brainfuck in Batch", por ejemplo, utilicé un objeto array/table-like para almacenar la memoria (dado que el lote le permite cambiar la clave de un valor, así: SET ARRAY[%KEY%]=%VALUE%)

Cuestiones relacionadas