我是这种语言的新手。
command <
用于递减内存索引的指针。
以下代码用于添加两位数字。
根据这个程序,它首先接受输入,然后将其存储在内存[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 :(得分:1)
该代码显然有一个错误&lt;应该是>反之亦然。
如果尝试将指针递减超过0,会发生什么情况。一些翻译人员崩溃了,有些翻译过来。
最好总是假设翻译会崩溃。这有一个简单的原因。某些实现不会将磁带绑定到30000单元,并且会在请求时立即添加内存。因此磁带没有“结束”,所以从0开始不能包裹到最后(因为没有一个)
答案 1 :(得分:0)
嗯,完全从理论上回答你的问题基础。
首先,您应该知道brainfuck设计为turing-complete。
bigfuck的图灵完全性假设语言本身可用于模拟任何单一的Turing machine
Definition of turng machine假设无限磁带。
无限的记忆是不可能获得的。为了假装磁带是无限的,你应该使用尽可能多的内存。
如果你的记忆已经满了,你应该抛出一个异常,因为一旦记忆力有限,脑力劳动根本就没有意义。
答案 2 :(得分:0)
这实际上取决于翻译。原始语言由30,000个存储单元组成。如果在单元格零处递减以避免抛出异常,许多人选择循环到最后一个单元格。