我想将用空格分隔的积分列表打印到标准输出。列表生成速度很快,所以我尝试用序列 [1..200000] 来解决这个问题。
在 C 中,我可以像这样实现它:
#include "stdio.h"
int main()
{
int i;
for(i = 0; i <= 200000; ++i)
printf("%d ", i);
return 0;
}
我可以实现的 Haskell 中最快的解决方案大约慢了三倍:
import Data.List (intercalate)
main = putStr . intercalate " " . map (show) $ [1..(200000)]
我在某些方面尝试了 ByteStrings,但有了它们,它变得更慢了。最大的问题似乎是使用 show 将整数转换为字符串(或转换为 ByteStrings)。
有什么建议可以在不与 C 接口的情况下加快速度吗?它不应该变得复杂(尽可能简短和美观,使用其他 Haskell 模块就可以了)。