我想打印一個積分列表,用空格分隔到stdout。列表生成速度很快,所以我試圖用序列[1..200000]來解決這個問題。高效輸出數字
在C,我可以這樣實現:
#include "stdio.h"
int main()
{
int i;
for(i = 0; i <= 200000; ++i)
printf("%d ", i);
return 0;
}
在Haskell我可以實現最快的解決方案約3倍慢:
import Data.List (intercalate)
main = putStr . intercalate " " . map (show) $ [1..(200000)]
我想在某些方面字節串,但與他們相比,它變得更慢。 大問題似乎是用show(或轉換爲ByteStrings)將整數轉換爲字符串。
任何建議如何加快這一點,而無需連接到C?它不應該變得複雜(儘可能簡短和美觀,使用其他Haskell模塊也可以)。
一如既往,分析>>>>>猜測。 – delnan 2010-11-26 13:47:45
您是否檢查過每次寫入元素的速度?寫入控制檯通常很慢,所以這可能會更糟糕,但它可能值得一試。您可以嘗試構建一定數量的元素而不是一個巨大的字符串,但是您可能需要使用append(++)或Hughes列表(DList)來執行此操作,這會添加額外的工作。這就是爲什麼我猜測寫每個元素仍然有競爭力。 – 2010-11-26 16:17:51
我試過一次寫了一個數字的版本(就像我認爲的一樣),但速度較慢。 – 2010-11-26 16:24:58