lazy-sequences

___ tag123clojure ___ Clojure ist ein moderner Lisp-Dialekt für die Java Virtual Machine (mit Versionen für CLR und JavaScript). Mehr als nur eine Implementierung von Lisp in Java, bietet Clojure Zugriff auf Klassen und Ökosysteme von Java. ___ qstnhdr ___ Wie verbessert man die Textverarbeitungsleistung in Clojure? ___ answer16279041 ___

Nur zum Vergleich, hier ist eine Regexp-basierte Clojure-Version

%Vor%     
___ tag123textprocessing ___ Mechanisierung der Erstellung oder Manipulation von elektronischem Text. ___ answer16258832 ___

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%     
___ tag123lazysequenzen ___ Lazy-Sequenzen sind Sequenzen, die beim Zugriff auf ihre Member erstellt werden. ___ qstntxt ___

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:

  • Bereinige unerwünschte Zeichen;
  • Konvertiert die Zeichenfolge in Kleinbuchstaben;
  • Teilen Sie das Dokument auf, um eine Liste von Wörtern zu erhalten;
  • Erstellen Sie eine Karte, die jedes Wort seinen Vorkommen im Dokument zuordnet.

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.

    
___
2
Antworten

wie Einheit Test für Faulheit

Ich habe eine Funktion, die eine faule Seq und eine unrealisierte faul Seq zurückgeben soll. Jetzt möchte ich einen Komponententest schreiben (in test-is btw), um sicherzustellen, dass das Ergebnis eine unrealisierte Lazy-Sequenz ist.     
30.10.2009, 19:48
3
Antworten

Lazy Partition-by

Ich habe eine Quelle von Elementen und möchte Läufe von ihnen mit dem gleichen Wert einer Schlüsselfunktion getrennt verarbeiten. In Python würde das wie aussehen %Vor% Diese Lösung ist völlig faul, d. h. wenn process nicht versucht, den...
14.07.2014, 13:58
1
Antwort

doppelter Stream-Feed, um unnötige Memoization zu verhindern?

Ich bin neu bei Haskell und versuche Eulers Sieb im Stream-Processing-Stil zu implementieren. Als ich das Haskell-Wiki über Primzahlen überprüfte, fand ich eine mysteriöse Optimierungstechnik für Streams. In 3.8 Lineares Zusammenführen di...
15.12.2012, 17:21
2
Antworten

Wie verbessert man die Textverarbeitungsleistung in Clojure?

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: Ber...
27.04.2013, 21:23