当我运行以下Brainfuck程序(source)...
时>+>++>+++>++++>+++++>++++++>+++++++>++++++++>++++++++++++++++++++++++++++++++<<<<<<<<[>>>>>>>>+.<<<<<<<<]
...通过我使用的解释器(一个用Perl编写的小解释器)它不应该做的事情(“你会发现它永远循环并打印出每个字符,从空格开始(32) ,以ASCIIbetical order“),而是打印输出,循环:
Wide character in print at (eval 1) line 1, <> chunk 1.
是的,代码包含冗余。它是从Haskell中自动生成的。
答案 0 :(得分:3)
在你的环境中设置PERLIO =:utf8告诉perl IO应该在utf8中并且它将停止警告。
答案 1 :(得分:1)
您的解释器可能会使用Perl function(例如“chr”)在输出时将单元格值转换为字符,并且不会将单元格值限制为[0; 255]。
虽然这在某些计算中很有用,但Brainfuck输出通常是字节,而Unicode代码点通常编码为UTF-8,即使不是,255以上的代码也需要多于一个字节,当然。
我确定你首先做获取所有这些字符,然后只有当单元格值太大时才会出现警告。也许,如果你让它运行一段时间,单元格值会回绕(可能是32767或2147483647),那么你会有负值,最后会再次出现32,重复这个循环。