Sto leggendo 512^2 doppi delimitati da spazi bianchi scritti in un file di testo nel mio programma Erlang pipettandoli allo stdin.Come mai il mio IO funziona così lentamente in Erlang?
In Erlang questo richiede 2m25s, in un programma Haskell equivalente ci vogliono 3 secondi, quindi devo andare contro il modo Erlang di farlo in qualche modo.
Sto usando i primitivi IO di Erlang in modo stupido, o c'è qualcos'altro che non va nel mio programma?
Si noti che non mi interessa l'ordine dei valori nell'elenco risultante, quindi nessuna operazione inversa.
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()
Grazie molto per qualsiasi aiuto.
Sembra anche che il programma Erlang generi l'elenco di numeri al contrario. – augustss