5

次のコード スニペットはウィキペディアからのもので、標準の 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. ]

ここで何が起こっているかの要点は理解していますが、3 行目から 6 行目で何が起こっているかの仕組みは理解できませ+++++ +++++ん。70に等しい?すべきではありませんか?スルーが魔法のように 10 倍になっているようですが、その理由はわかりません。a[0]++*ptra[1]a[1] = 7a[1]a[4]

4

3 に答える 3

2

文字は[]ループを示します。その前の 10+秒は、ループが実行される回数を示します。これは、さまざまなコマンドの意味と<<<< -コマンドのシーケンスを理解すると明らかになります。

ループが実行されるたびに、次の手順が実行されます。

> 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 回足す効果があります。別の言い方をすれば、配列にあるようにループを実行するときに、最初の 5 つのポインター位置に値を書き込むと、次のようになります。

[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
于 2014-01-08T19:22:21.850 に答える