2014-01-08 91 views
5

以下代码片段来自维基百科,并且是似乎是标准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. ] 

我明白是怎么回事的要点,但我不明白的是什么,通过6.如果+++++ +++++发生在线路3的机制增加了10到价值a[0],为什么增加一个指针并执行++*ptr七次导致a[1]等于70?不应该a[1] = 7?看起来像a[1]a[4]神奇地增加了十倍,我不明白为什么。

+3

循环运行十次。 –

+0

非常感谢!我知道我错过了一些邪恶的东西...... –

+0

是的,你是对的。我似乎在描述该计划的第一段的第二部分中错过了/略过。 Mea culpa。 –

回答

2

[]字符表示循环。它表示循环将运行多少次之前的10 +。当您了解各种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.然后,[启动一个循环。在循环中,每次迭代都会将一组数字添加到其他单元格。例如,它每次增加7个单元格。循环的最后一行,<<<< -将指针放回到cell0并递减它。这样,每次迭代都会使cell0倒数。当它达到0时,循环停止并且程序继续。因此,它将cell1添加了7次10次,并且此循环使cell1 = 10 * 7。