我是这门语言的新手。
命令 <
用于递减内存索引的指针。
下面的代码用于添加两个个位数。
根据这个程序,它首先接受输入,然后将其存储在内存[0]中,因为最初的内存索引位于位置0。然后,它递减内存索引,使其现在为 -1,因此它应该显示运行时。为什么它在 IDEone 中成功运行?
内存块是否在循环中?
, ;read character and store it in p1
------------------------------------------------ ;return ascii to Dec
< ;move pointer to p2 (second byte)
, ;read character and store it in p2
------------------------------------------------ ;return ascii to Dec
[ ; enter loop
- ; decrement p2
> ; move to p1
+ ; increment p1
< ; move to p2
] ; we exit the loop when the last cell is empty
> ;go back to p1
++++++++++++++++++++++++++++++++++++++++++++++++ ;return Dec to ascii
. ;print p1
该代码显然有一个错误,所有<都应该>,反之亦然。都应该>
未定义如果尝试将指针递减到 0 以上会发生什么情况。有些口译员崩溃,有些缠绕。
最好始终假设解释器会崩溃。原因很简单。某些实现不会将磁带绑定到 30000 个单元,并且会在请求时立即继续添加内存。因此,磁带没有"结束",所以从 0 向下不能绕到结尾(因为没有一个)
这实际上取决于解释器。原始语言由 30,000 个存储单元组成的数组组成。如果单元格为零,许多人选择循环到最后一个单元格,以避免引发异常。
好吧,完全根据理论回答您的问题。
首先,你应该知道,大脑设计是图灵完备的。
Brainfuck的图灵完备性假设语言本身可以用来模拟任何单磁带图灵机
转机的定义假设无限胶带。
无限的记忆是不可能得到的。为了假装磁带是无限的,您应该使用尽可能多的内存。
如果你的记忆已满,你应该抛出一个异常,因为一旦记忆是有限的,脑残就毫无意义了。