2012-06-20 5 views

답변

12

나는 그것이 자격이 있다고 믿는다. 튜링 완성도의 기본 요구 사항은 상태 (변수) 저장, 분기 기능 (조건부) 및 반복 (반복) 기능을 포함하여 몇 가지 간단한 작업으로 축소 될 수 있다고 생각됩니다. Batch에는 이러한 모든 기능이 있으므로 Turing의 완전성에 대한 아직 알려지지 않은 요구 사항이 없으면 배치 스크립팅이 적합합니다.

+6

사람들은 순수 배치 스크립팅을 사용하여 완전히 우스운 일을 처리합니다. : S – Wug

+1

나는 이것보다 약간 더있는 것처럼 느낍니다. Turing Machine은 "상태 저장"뿐만 아니라 기본적으로 양 끝단 스택을 포함합니다. FSM은 상태, 분기 및 반복 버전이 약하며 TC가 아닙니다. PDA는 스택을 가지고 있으며 여전히 TC가 아닙니다. 두 개의 스택이있는 PDA를 TC로 사용합니다. –

15

I했습니다 단지 (브레인 퍽이 완료 튜링이 입증되어 있기 때문) '검증 된'일괄 배치의 브레인 퍽 인터프리터를 만들어 튜링 완료입니다 : 그런데

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

, 튜링 완료 프로그래밍 언어는 다음 중 하나를 의미합니다.

  • 동일한 언어로 된 다른 프로그램이 결국 멈추거나 영원히 계속 실행될 것인지 결정할 수있는 프로그램을 만들 수 없습니다 (이 코드가 어떻게 작동하는지 모르겠습니다. 누구도 생각하지 마라. ver는 Turing의 완성도를 증명하기 위해 이것을 사용했습니다).
  • 가능한 언어로 가능한 모든 프로그램을 실행할 수있는 프로그램을 만들 수있는 (A 인터프리터. Brainfuck interpreter in Brainfuck (나는 불행하게도 찾을 수없는 더 나은 버전이있다이 사람이 정말 느린))
  • 가능한 것은 행동하는 또는 같은 것은 튜링 컴퓨터 시뮬레이션, 따라서 적어도 다음 측면 포함 즉 다른 값에 변수 값을 변경 (메모리에 쓰기
    • 에만 falsetrue을 변경할 수있는 다른 방법은 주위를 여전히 유효합니다. 일괄 처리의 경우 : SET A=5)
    • '무한'메모리 (즉, 당신도 쓸 수있는 1 비트/바이트 이상이어야합니다. 무한히 많은 것을 선호합니다. 전체 객체에 쓸 수있는 한 문자열, 배열, 테이블, 비트 필드 또는 정수 만 유효합니다. 정수를 유효하게하려면 배열을 색인 할 수 있어야합니다 (예 : array[index];)
    • 조건부 점프 문은
  • (A가 0 인 경우 스택의 현재 값이 0 인 경우, 즉 IF %A%==0 GOTO LABEL (점프) 종료) while (var) {/*code*/} (var에 0이 아닌 상태 코드를 시작으로 다시 이동) 또는 jmp0 exit; (점프 레이블을)

전통적인 튜링 기계는 양면에 무한대의 테이프가 있어야하지만 단순한 배열, 문자열, 표 (객체) 또는 이진수 (비트 필드)가 필요합니다. 너무 일한다. 내 "Brainfuck in Batch"에서는 예를 들어 배열/테이블과 같은 객체를 사용하여 메모리를 저장했습니다 (일괄 처리로 값의 키를 변경할 수 있습니다. SET ARRAY[%KEY%]=%VALUE%)

관련 문제