Nur zum Vergleich, hier ist eine Regexp-basierte Clojure-Version
%Vor%Einige Dinge, die Sie tun könnten, würden diesen Code wahrscheinlich beschleunigen:
1) Anstatt Ihre %code% auf %code% zu mappen, führen Sie einfach direkte Vergleiche zwischen den Zeichen durch. Dies ist schneller aus dem gleichen Grund, es wäre schneller in Java.
2) Sie verwenden wiederholt %code% , um Einzelzeichenwerte in vollwertige Zeichenfolgen zu konvertieren. Erwägen Sie wiederum, die Zeichenwerte direkt zu verwenden. Auch hier ist die Erstellung von Objekten langsam, genau wie in Java.
3) Sie sollten %code% durch %code% ersetzen. Vielleicht inspizieren %code% source, um zu sehen, wie es schneller ist.
4) Wenn Sie eine %code% in einer Schleife aktualisieren müssen, verwenden Sie %code% . Siehe: Ссылка
Beachten Sie auch, dass %code% eine %code% zurückgibt, so dass Sie mit jedem Aufruf von %code% neue Instanzen erstellen - daher langsam und warum Sie Transienten verwenden sollten.
5) Das ist dein Freund: %code% - Du hast ziemlich viel darüber nachgedacht, was von profitieren könnte Hinweise
%Vor%Ich schreibe eine einfache Desktop-Suchmaschine in Clojure, um mehr über die Sprache zu erfahren. Bis jetzt ist die Leistung während der Textverarbeitungsphase meines Programms wirklich schlecht.
Während der Textverarbeitung muss ich:
Hier ist der Code:
%Vor%Da ich eine andere Implementierung dieses Problems in Haskell habe, habe ich beide verglichen Sie können in den folgenden Ausgaben sehen.
Clojure-Version:
%Vor%Haskell-Version:
%Vor%Ich denke, dass die Konvertierung ( string - & gt; Lazy Sequence ) in der Clojure-Implementierung die Performance zerstört. Wie kann ich es verbessern?
PS: Der gesamte Code und die Daten, die in diesen Tests verwendet werden, können hier heruntergeladen werden.