我正在将一个由512^2个以空格分隔的双精度浮点数组成的文本文件通过stdin管道输入到我的Erlang程序中进行读取。
在Erlang中,这需要花费2分钟25秒的时间,在等效的Haskell程序中只需要3秒钟的时间,所以我一定是以某种方式违反了Erlang的做法。
我是否以一种愚蠢的方式使用了Erlang的IO原语,或者我的程序还有其他问题?
请注意,我不关心结果列表中的值的顺序,因此不需要进行reverse操作。
Erlang:
非常感谢您的帮助。
谢谢。
在Erlang中,这需要花费2分钟25秒的时间,在等效的Haskell程序中只需要3秒钟的时间,所以我一定是以某种方式违反了Erlang的做法。
我是否以一种愚蠢的方式使用了Erlang的IO原语,或者我的程序还有其他问题?
请注意,我不关心结果列表中的值的顺序,因此不需要进行reverse操作。
Erlang:
-module(iotest).
-import(io).
-export([main/0]).
main() ->
Values = read(),
io:write(Values).
read() -> read([]).
read(Acc) ->
case io:fread("", "~f") of
{ok, Value} -> read([Value | Acc]);
eof -> Acc
end.
Haskell:
module IOTest (
main
) where
main :: IO ()
main = do
text <- getContents
let values = map read (words text) :: [Double]
putStrLn $ show values
return ()
非常感谢您的帮助。
谢谢。