2014-12-24 5 views
1

Когда я запускаю следующую программу Brainfuck (source) ...Почему я получаю ошибку Perl в этой программе brainfuck?

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

... через переводчика я использую (маленький один написан на Perl) это не то, что он должен делать ("ты увижу, что он зацикливается и печатает каждый символ, начиная с пространством (32), в порядке ASCIIbetical "), но вместо этого печатает, зацикливание:

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

Да, код содержит избыточность. Он генерируется автоматически, из всех вещей, Haskell.

ответ

1

Возможно, ваш переводчик использует Perl function, например «chr», для преобразования значений ячеек в символы после вывода и не ограничивает значения ячеек [0; 255].

Хотя это может быть полезно в некоторых вычислениях, выход Brainfuck обычно является байтами, в то время как кодовые точки Unicode обычно кодируются как UTF-8, и даже если нет, то, что выше 255, нужно, в любом случае, больше одного байта.

Я уверен, что вы первый do получите все эти символы, и только после этого предупреждения, когда значение ячейки станет слишком большим. Может быть, если вы разрешите ему работать в течение некоторого времени, значения ячейки обтекают (на 32767 или 2147483647, вероятно), тогда у вас есть отрицательные значения, а в итоге 32 снова повторяется цикл.

+0

Хм, для Perl, при 2^31, вероятно. Но да, перенаправляя его в файл, я сначала вижу ожидаемый результат. – cookieundercover

3

Установить PERLIO =: utf8 в вашей среде, чтобы сообщить perl, что IO должен быть в utf8, и он остановит предупреждение.

+0

Спасибо за обходной путь! – cookieundercover

Смежные вопросы