2014-01-08 3 views
5

다음 코드 스 니펫은 Wikipedia에서 가져온 것으로 Hello World 표준이되는 것의 전문입니다! 브레인 퍽에서 프로그램 ... 안녕하세요, 세계! Brainfuck에서

1. +++++ +++++    initialize counter (cell #0) to 10 
2. [      use loop to set the next four cells to 70/100/30/10 
3. > +++++ ++    add 7 to cell #1 
4. > +++++ +++++   add 10 to cell #2 
5. > +++     add 3 to cell #3 
6. > +      add 1 to cell #4 
7. <<<< -     decrement counter (cell #0) 
8. ] 

내가 여기에 무슨 일이 일어나고 있는지의 요점을 이해는하지만, 내가 이해하지 못하는 것은 값에 10을 추가 6. 만약 +++++ +++++을 통해 라인 3에 무슨 일이 일어나고 있는지의 역학입니다 a[0]인데 왜 포인터를 1 씩 증가시키고 ++*ptr을 7 번 실행하면 a[1]이 70이됩니까? a[1] = 7을 사용해야합니까? a[1]에서 a[4]까지 마술처럼 10 배 증가한 것 같습니다. 이유는 알 수 없습니다.

+3

루프가 10 번 실행됩니다. –

+0

대단히 감사합니다! 나는 무언가를 잃어 버렸음을 알았다. ... –

+0

그래, 네가 맞아. 프로그램을 설명하는 첫 번째 단락의 두 번째 부분에서 놓친 것 같았습니다. Mea culpa. –

답변

2

[] 문자는 루프를 나타냅니다. 그 전에는 루프가 실행될 횟수를 나타 내기 전에 1+을 표시합니다. 다양한 commands의 의미와 <<<< - 명령의 순서를 이해하면이 점이 분명 해집니다.

루프가 실행될 때마다, 다음과 같이 실행한다 :

> move the pointer 1 space to the right 
+++++ ++ add 7 to the current pointer 
etc 3 more times > > > 
<<<< - move back to the counter and decrement 

이것은 "7, 10, 3, 1 '10 회를 추가하는 효과가있다.

[10, 0, 0, 0, 0]  at first 
[9, 7, 10, 3, 1]  after first run 
[8, 14, 20, 6, 2] after second 
... 
[0, 70, 100, 30, 10] up to this, the loop ends since the counter is 0, 
        and control continues 
2

이 사이트에 좋은 브레인 퍽 시각화가있다 : http://fatiherikli.github.io/brainfuck-visualizer/ 그것을 만드는 첫 번째 5 개 포인터 위치에서 값을 작성하는 경우가 배열에있는 것처럼 루프를 실행 한, 다른 방법을 넣으려면 brainfuck 언어를 더 쉽게 이해할 수 있습니다.

0

++++++++++은 cell0을 10으로 만듭니다. 그러면 [이 루프를 시작합니다. 루프에서 각 반복은 세트 번호를 다른 셀에 추가합니다. 예를 들어, 매번 셀 1에 7을 더합니다. 루프의 마지막 줄인 <<<< -은 포인터를 다시 cell0에 놓고 감소시킵니다. 이렇게하면 각 반복은 cell0을 카운트 다운시킵니다. 0에 도달하면 루프가 멈추고 프로그램이 계속 실행됩니다. 따라서 cell1에 7을 10 번 더하고이 루프는 cell1 = 10 * 7이됩니다.