Brainfuck语言的记忆指数

时间:2014-02-15 10:47:24

标签: brainfuck esoteric-languages

我是这种语言的新手。

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

3 个答案:

答案 0 :(得分:1)

该代码显然有一个错误&lt;应该是>反之亦然。

如果尝试将指针递减超过0,会发生什么情况。一些翻译人员崩溃了,有些翻译过来。

最好总是假设翻译会崩溃。这有一个简单的原因。某些实现不会将磁带绑定到30000单元,并且会在请求时立即添加内存。因此磁带没有“结束”,所以从0开始不能包裹到最后(因为没有一个)

答案 1 :(得分:0)

嗯,完全从理论上回答你的问题基础。

首先,您应该知道brainfuck设计为turing-complete

bigfuck的图灵完全性假设语言本身可用于模拟任何单一的Turing machine

Definition of turng machine假设无限磁带

无限的记忆是不可能获得的。为了假装磁带是无限的,你应该使用尽可能多的内存。

如果你的记忆已经满了,你应该抛出一个异常,因为一旦记忆力有限,脑力劳动根本就没有意义。

答案 2 :(得分:0)

这实际上取决于翻译。原始语言由30,000个存储单元组成。如果在单元格零处递减以避免抛出异常,许多人选择循环到最后一个单元格。