指针位置 - 转到 0 或特定位置(检查是否越界)

Pointer position - go to 0 or specific (check if out of bounds)

我是 brainfuck 的新手,才刚刚开始迈出我的第一步。我需要一些帮助来找出一种聪明的方法(即使它有点老套),以便在我的指针到达那里之前查看我的指针是否越界。因此,我希望能够看到我位于内存阵列的第一个单元格,而不是进一步减少我的指针。我试着用谷歌搜索这个,但我找不到任何东西。如果有人有任何想法,即使它们只是纯逻辑而没有代码,我也会很感激。

如果有人写了一段像 <<<<. 这样的代码,看起来很多 brainfuck 解释器都不会卡住,因为它们只是在内存数组的末尾环绕。但是,其中一些卡住了。所以,如果这是一个非常特定于解释器的问题,让我概括一下:有没有办法不管现有位置如何都转到内存数组中的特定位置?

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

很简单的回答:没有。

我不是想成为一个聪明*ss 或任何东西。答案确实是那么简短。这在 BF 中根本不可能。你想确保你不越界?您必须正确编码,确保您始终可以分辨出指针的实际位置。

即使您编写的代码恰好在使用 "hacky solution" 的一个解释器上运行良好,那么它也不是真正有效的程序。它不会 运行 在任何解释器上。

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

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

> >>>>>>>>.>.[<] 在 return 将数据指针指向单元格 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。如果您需要快速获取代码周围的数据指针,您可以使用相反的方法使用相同的想法。最重要的是,下面代码 >+++>++>+[<][<][<] return 的测试 运行 将我带到了第一个单元格,尽管有额外的 < 因为括号强制代码跳过作为单元格1 被标记为 0。(I tested it using this resource)

然而,正如@Cedric Mamo 在他的回答中所说,没有明确的方法可以防止代码越界,因为如果您在到达单元格 1 后不小心键入 <,就会越界。除非你像我上面提到的那样编写安全措施并观察你在做什么,否则没有确切的方法来防止这种情况。