2014-01-08 16 views
5

次のコードスニペットはWikipediaのもので、標準のHello Worldと思われるもののプリアンプルです! Brainfuckにおけるプログラム...こんにちは、世界! 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

はい、そうです。プログラムを説明している最初の段落の2番目の部分で、私は見逃してしまった/スキミングしていたようでした。 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回を追加する効果を有します。彼らは、アレイにいるようにあなたがループを実行すると、あなたが最初の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 
0

++++++++++はcell0を10に等しくします。その後、[はループを開始します。ループでは、各反復が他のセルにセット番号を追加します。たとえば、毎回セル1に7を加算します。ループの最後の行である<<<< -は、ポインタをcell0に戻し、それをデクリメントします。このようにして、各繰り返しはcell0のカウントダウンを行います。 0に達すると、ループが停止してプログラムが実行されます。したがって、cell1に7を10回追加し、このループはcell1 = 10 * 7にします。

関連する問題