1

当我运行以下 Brainfuck 程序()...

>+>++>+++>++++>+++++>++++++>+++++++>++++++++>++++++++++++++++++++++++++++++++<<<<<<<<[>>>>>>>>+.<<<<<<<<]

...通过我使用的解释器(一个用 Perl 编写的小解释器),它并没有做它应该做的事情(“你会发现它永远循环并打印出每个字符,从空格 (32) 开始,以 ASCIIbetical order"),而是打印出来,循环:

Wide character in print at (eval 1) line 1, <> chunk 1.

是的,代码包含冗余。它是由 Haskell 自动生成的。

4

2 回答 2

4

在您的环境中设置 PERLIO=:utf8 以告诉 perl IO 应该在 utf8 中,它将停止警告。

于 2014-12-24T02:10:05.330 回答
2

您的解释器可能使用Perl 函数(例如“chr”)在输出时将单元格值转换为字符,并且不会将单元格值限制为 [0;255]。

虽然这在某些计算中可能很有用,但 Brainfuck 输出通常是字节,而 Unicode 代码点通常编码为 UTF-8,即使不是,255 以上的那些自然也需要超过一个字节。

我敢肯定,一旦单元格值变得太大,您首先会得到所有这些字符,然后才会得到警告。也许,如果你让它运行很长时间,单元格值会环绕(可能是 32767 或 2147483647),然后你有负值,最终又是 32,重复循环。

于 2014-12-24T01:11:36.363 回答