3

我是一个brainfuck的新手,刚刚开始迈出我的第一步。我需要一些帮助来找出一个聪明的方法(即使它有点笨拙)来查看我的指针是否超出范围,然后再去那里。因此,我希望能够看到我位于内存阵列的第一个单元,并且不会进一步减少我的指针。我试着用谷歌搜索这个,我找不到任何东西。如果有人有任何想法,即使它们只是纯逻辑而没有代码,我也会很感激。

<<<<.从看来,如果有人编写一段代码,就像他们只是在内存数组的末尾环绕一样,许多笨拙的解释器不会被卡住。然而,他们中的一些人被卡住了。所以,如果这是一个非常特定于解释器的问题,让我概括一下:有没有办法去内存阵列中的特定位置而不考虑现有位置?

4

2 回答 2

3

"Is there a way to go to a specific position in the memory array regardless of existing position?"

Very simple answer: no.

I'm not trying to be a smart*ss or anything. The answer really is that short and simple. That is simply not possible in BF. You want to ensure you don't go out of bounds? You'd have to code properly, by making sure that you can always tell where the pointer actually is.

And even if you write code that happens to work well on one interpreter using a "hacky solution", then it wouldn't really be a valid program. It wouldn't run on just any interpreter.

In BF the cells aren't addressable. You have to live with that fact.

于 2016-03-03T21:37:21.187 回答
3

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

> >>>>>>>>.>.[<]在将数据指针返回到单元格 1 之前显示 hi,从而节省了自己编写所有这些<.

同样,这是假设中间的数字不是 0。但是,如果您正在处理特定单元格中的数据,并且您知道数据永远不会达到 0,则可以跳回到标记为 0 的上一个单元格,依此类推。这或多或少类似于批处理文件中的反向 goto。

因此,假设我有单元格数据[0 2 3 4 0 5 3 9 3 2 0 2 3 2 0],并且我们在第 3 个 0 处有数据指针。我们可以跳回第一个数组,<[<]<[<]因为该命令将跳过 0 值,并重复[<]直到它到达下一个 0。您可以使用相同的如果您需要快速获取代码周围的数据指针,请使用相反的想法。最重要的是,以下代码的测试运行将>+++>++>+[<][<][<]我返回到第一个单元格,尽管有额外<的,因为括号强制代码跳过,因为单元格 1 标记为 0。(我使用此资源对其进行了测试

但是,正如@Cedric Mamo 在他的回答中所说,没有明确的方法可以防止代码越界,因为如果您在到达单元格 1 后不小心输入了 < ,就会越界。除非您按照我上面提到的安全措施进行编程并观察您在做什么,否则没有确切的方法可以防止这种情况发生。

于 2016-03-21T03:54:14.527 回答