2016-03-03 69 views
3

我是一个脑袋新手,刚开始采取我的第一步。我希望有一些帮助可以找出一个聪明的方法(即使它有点冒险),看看我的指针是否超出范围,然后才能到达那里。因此,我希望能够看到我处于内存数组的第一个单元格,并且不会进一步减少我的指针。我试着用google搜索,但找不到任何东西。如果任何人有任何想法,即使他们只是纯粹的逻辑和没有代码,我会感激他们。指针的位置 - 去0或特定(检查是否越界)

从看起来很多brainfuck解释器不会卡住,如果有人写了一段代码,如<<<<.,因为他们只是在存储器阵列的末尾环绕。但是,其中一些卡住了。所以,如果这是一个非常具体的解释器问题,让我概括一下:有没有办法去存储器阵列中的特定位置而不管现有的位置?

回答

3

“有没有办法去存储器阵列中的特定位置,而不管现有的位置?”

很简单的答案:不。

我不想成为一个聪明的* ss或任何东西。答案真的很简单。这在BF中根本不可能。你想确保你不会出界?您必须正确编写代码,确保始终可以知道指针的实际位置。

而且,即使您使用“hacky解决方案”编写的代码碰巧在一个解释器上运行良好,那么它实际上并不是一个有效的程序。它不会在任何解释器上运行。

在BF中,单元格不可寻址。你必须忍受这一事实。

+0

如果他在第二个单元格开始他的程序并使用单元格1作为值为0的故障安全,他可以使用[<]然而他希望/需要多次将其代码返回到数组1并且不再进一步。 – Jouster500

+0

是的,但是,如果,例如,他使用两个单元格来存储16位数字,那么任何小于256的数字都会搞砸了。还有很多其他的情况。在编程中发现数字0是最常用的数字,特别是在循环BF中时。 –

+0

其中所有内容都可以回顾您在编程时正在做什么。 – Jouster500

2

>开始您的代码,使第一个单元格= 0。现在假设它们之间的数字不是0,可以使用[<]返回起始数组。因此,例如,我明确地将ASCII字符AZ映射到单元格2-27,将单元格1保留为0.这样,如果我想打印出一条消息,我会去

> >>>>>>>>.>.[<]在返回指向单元格1的数据指针,为自己节省了编写所有这些的时间<

再次,这是假设中间的数字不是0。但是,如果您正在处理特定单元格中的数据,并且您知道数据不会达到0,则可以跳回到之前被标记为0的单元格,依此类推。这或多或少像批处理文件中的逆向gotos。

所以可以说我有细胞数据[0 2 3 4 0 5 3 9 3 2 0 2 3 2 0],我们必须在第3 0。datapointer我们可以做<[<]<[<]作为该命令将跳过0值跳回第一阵列,并重复[<]直到它到达下一个如果您需要快速获取代码周围的数据指针,则可以使用相反的想法。最重要的是,下面的代码>+++>++>+[<][<][<]的测试运行返回我到第一小区,尽管附加<因为括号迫使代码跳过作为电池1被标记为0(I tested it using this resource

然而作为@Cedric马莫在他的回答中说,没有明确的方法可以防止代码超出范围,因为如果在到达单元格1后意外键入了<,则会超出界限。除非你在保护措施中编程,比如我上面提到的并观察你在做什么,否则没有确切的方法来防止这种情况发生。

相关问题