2014-12-24 98 views
1

當我運行以下Brainfuck程序(source)...爲什麼我在這個brainfuck程序中遇到Perl錯誤?

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

...通過我用的解釋(一小一用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以上的代碼自然也需要多於一個字節。

我敢肯定,你第一個得到所有這些字符,只有警告,一旦單元格值變得太大。也許,如果讓它運行一段時間,那麼單元格值將環繞(可能爲32767或2147483647),那麼您將得到負值,最後再重複32次循環。

+0

對於Perl,可能是2^31。但是,是將它重定向到一個文件,我首先看到預期的輸出。 – cookieundercover

3

在你的環境中設置PERLIO =:utf8,告訴perl IO應該在utf8中,它會停止警告。

+0

感謝您的解決方法! – cookieundercover

相關問題