2014-02-15 2 views
1

이 언어를 처음 사용합니다.Brainfuck 언어의 메모리 색인

명령 <은 메모리 인덱스의 포인터를 감소시키는 데 사용됩니다.

아래의 코드는 두 자리 숫자를 더하는 코드입니다.

이 프로그램에 따르면, 처음에는 메모리 인덱스가 위치 0에 있으므로 입력을 가져 와서 메모리 [0]에 저장합니다. 그러면 메모리 인덱스가 감소하여 -1이되므로 런타임이 표시되어야합니다. IDEone에서 성공적으로 실행되는 이유는 무엇입니까?

메모리 블록이 순환 상태입니까?

,       ;read character and store it in p1 
------------------------------------------------ ;return ascii to Dec 
<       ;move pointer to p2 (second byte) 
,       ;read character and store it in p2 
------------------------------------------------ ;return ascii to Dec 
[       ; enter loop 
-       ; decrement p2 
>       ; move to p1 
+       ; increment p1 
<       ; move to p2 
]       ; we exit the loop when the last cell is empty 
>       ;go back to p1 
++++++++++++++++++++++++++++++++++++++++++++++++  ;return Dec to ascii 
.       ;print p1 
+1

"메모리 블록이 순환 상태입니까?"라는 질문에 대해 정말로 분명하지 않습니다. –

+0

나쁜 영어로 죄송합니다. 메모리 인덱스 = 0이고 인덱스를 수행하는 것처럼 작동합니까? 그렇다면 메모리 크기가 3000이면 인덱스 값은 3000이됩니까? – user2124441

답변

1

그 코드는 모두 <이어야하며 그 반대도 마찬가지입니다.

0을 지나서 포인터를 감소 시키려고하면 정의되지 않습니다. 일부 통역사가 충돌하고 랩 어라운드합니다.

항상 인터프리터가 충돌한다고 가정하는 것이 가장 좋습니다. 이것에 대한 간단한 이유가 있습니다. 일부 구현은 테이프를 30000 셀에 바인딩하지 않으며 요청한 즉시 메모리를 계속 추가합니다. 따라서 테이프에 "끝"이 없으므로 0에서 내려 가면 끝까지 감쌀 수 없습니다. (아무 것도 없기 때문에)

0

글쎄, 이론에 근거하여 질문에 완전히 대답하십시오.

우선 brainfuckturing-complete으로 설계되었습니다. 브레인 퍽의

튜링 completness 자체 하여 해당 언어에 상관 단일 녹화 Turing machine

Definition of turng machine는 무한 테이프 가정 시뮬레이션하기 위해 사용될 수있다 가정한다.

무한한 메모리는 불가능합니다. 테이프가 무한하다고 가장하려면 가능한 한 많은 메모리를 사용해야합니다.

메모리가 가득 차면 예외를 throw해야합니다. 일단 메모리가 유한이면 뇌가 전혀 이해가되지 않기 때문입니다.

0

정말 인터프리터에 따라 다릅니다. 원래 언어는 30,000 개의 메모리 셀 어레이로 구성됩니다. 예외를 던지는 것을 피하기 위해 많은 셀이 셀 0에서 감소하는 경우 마지막 셀까지 순환하도록 선택합니다.