1

我是这种语言的新手。

命令<用于递减内存索引的指针。

下面的代码用于添加两个个位数。

根据这个程序,它首先接受输入,然后将其存储在 memory[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
4

3 回答 3

1

该代码显然有一个错误,所有<应该是>,反之亦然。

如果您尝试将指针递减到 0 之后会发生什么未定义。一些口译员崩溃,一些口译员崩溃。

最好总是假设解释器会崩溃。这有一个简单的原因。一些实现不会将磁带绑定到 30000 个单元,并且会在它请求时继续添加内存。因此磁带没有“结束”,所以从 0 向下走不能绕到结束(因为没有一个)

于 2014-02-17T09:02:12.427 回答
0

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

于 2014-04-17T21:48:00.990 回答
0

好吧,完全根据理论回答您的问题。

首先,你应该知道,brainfuck被设计成图灵完备的

Brainfuck 的图灵完备性假设语言本身可用于模拟任何单磁带图灵机

转机的定义假定磁带是无限的。

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

如果你的内存满了,你应该抛出一个异常,因为一旦内存是有限的,brainfuck 就没有任何意义了。

于 2014-02-25T03:25:02.847 回答