튜링 머신을 구현할 수있는 것을 구현하는 방법에는 여러 가지가 있습니다.
프로세서를 살펴보면 가장 적합한 프로세서는 아마도 레지스터 머신 모델 일 것 입니다 . 이 중 가장 단순한 (기호로) 다중 테이프 두 개의 기호 ( mark및 blank)입니다. 당신이 비의의로 확실히 뭔가를 갈 경우 inc(r), dec(r)그리고 jz(r,z)(레지스터 경우 점프 r명령에 제로 z나) clr(r)(일반 r) inc, je(i,j,z)(점프 i와 j는 명령 Z에 동일한 등록 할 경우).
다음과 같은 레지스터 시스템에 대한 언급을 보았습니다.
- inc (i, m)-레지스터 i를 증가시키고 m 행으로 이동
- jzdec (i, m1, m2)-레지스터 i가 0이면 m 행으로 이동하고, 그렇지 않으면 i를 줄이고 m2 행으로 이동
테이프의 데이터에 대한 다른 제약 조건이 있지만 Minsky 레지스터 시스템 은 완전히 완료됩니다 (개별 레지스터가 아닌 상태를 저장하는 Gödel 번호 여야 함)
그게 다야. 더 이상 없습니다.
그렇다면 왜 이러한 초박형 프로세서가 대신 사용되지 않습니까? 컴파일러를 작성하는 것은 정말 고통스럽고 프로세서가 할 수있는 다른 많은 일을 포기합니다. 비트 단위 and를 사용하는 add것이 좋으며 레지스터를 늘리고 루핑하여 모든 것을하려고 하는 것이 아닙니다. 8 가지 명령어가있는 Brainfuck 이라는 선호하는 프로그래밍 언어의 기초입니다 .
> 데이터 포인터를 증가
< 데이터 포인터를 줄입니다
+ 데이터 포인터에서 데이터를 증가
- 데이터 포인터에서 데이터 감소
. 데이터 포인터에서 데이터를 출력
, 입력을 읽고 데이터 포인터에 데이터를 저장
[포인터의 데이터가 0 인 경우 명령 포인터를 앞으로 이동하는 대신 일치하는 ]명령 다음에 명령으로 이동하십시오.
]포인터의 데이터가 0이 아닌 경우 명령 포인터를 앞으로 이동하는 대신 일치하는 ]명령 후에 명령으로 다시 이동하십시오.
Brainfuck의 컴파일러 를 찾을 수는 있지만 간단한 일을하는 것은 재미가 없습니다. 언어의 목적인 좌절을 즐기지 않는 한.
관련 독서 :