Ich lese 512 ^ 2 Leerzeichen-getrennte Doubles, die in eine Textdatei geschrieben sind, in mein Erlang-Programm, indem ich sie nach stdin lege.
In Erlang dauert das 2m25s, in einem äquivalenten Haskell-Programm dauert es 3s, also muss ich gegen den Erlang-Weg gehen, es irgendwie zu machen.
Benutzt ich Erlangs IO-Primitive auf eine dumme Weise, oder stimmt etwas anderes mit meinem Programm nicht?
Beachten Sie, dass mir die Reihenfolge der Werte in der resultierenden Liste nicht wichtig ist, also keine umgekehrte Operation.
Erlang:
%Vor%Haskell:
%Vor%Vielen Dank für jede Hilfe.
Nein, Sie benutzen Erlang IO nicht auf dumme Weise. Es ist ein Problem mit Erlang IO, von dem man nicht weiß, dass es schnell ist. Erlang ist weit verbreitet zum Schreiben von Servern, so dass Socke orientiert IO ist hervorragend abgestimmt. Block-orientierte Datei-IO ist nicht so schlecht, aber die Verwendung von IO-Modul für die Arbeit mit STDIN funktioniert nicht gut. Erlang ist für diese Art von Arbeit nicht weit verbreitet. Wenn Sie diese Art von Operationen benötigen, sollten Sie Ihre eigene spezialisierte Eingabe-Routine schreiben. Sie haben zwei Möglichkeiten:
list_to_float/1
für die Konvertierung. read/0
Funktion und -noshell
-noinput
Parameter für vm Aufruf) und dann wie in der ersten Option fortfahren. Nach meiner Meinung (und meiner früheren Erfahrung) kommt die größte Auswirkung in Ihrem Fall von der Verwendung einer Scan-ähnlichen Eingangsroutine für die Float-Decodierung, die durch langsamen (wiederholten) Aufruf abgefangen wird, aber es würde ein nicht-triviales Profiling erfordern / p>