Frage

Ich bin eine Simulationssoftware in Clojure zu entwickeln, die zu verarbeiten vielen Vektordaten (im Grunde Ursprung als Offsets in Arrays von Java Schwimmern, Länge typischerweise in 10-10000 Bereich) benötigen. Eine große Anzahl dieser Vektoren müssen durch verschiedene Verarbeitungsschritte gehen - zum Beispiel Normalisieren der Vektoren, Verketten zusammen zwei Ströme von Vektoren, etc einen gleitenden Mittelwert berechnet wird.

Anstatt alles in einem imperativen Stil zu machen, ich hatte gehofft, eine funktionelle Stil Clojure Lösung zu tun war, erstellen, die die folgenden tun würde:

  • ermöglicht eine beliebige Vektorfunktion in ein steckbares Modul , beispielsweise gedreht werden (Def Modul-a (Make-Modul eine Funktion))
  • erlauben diese Module werden in Rohrleitungen zusammengesetzt , z.B. (Def kombiniert-Modul (Combine-in-Reihe-Modul ein Modul-b)) würde die Ausgabe des Zuführmodul-a in den Eingang des Modul-b
  • ermöglichen auxillary Funktionen , um Zugriffszustand innerhalb eines gegebenen Moduls gespeichert, z.B. (Get-Moving-Average etwas-Moving-Average-Modul), die auch an der Arbeit benötigen würden, wenn einige-Moving-Average-Modul eingebettet ist tief in einer kombinierten Pipeline
  • versteckt jeden Textvorschlag Code hinter den Kulissen, zum Beispiel ausreichend große temporäre Arrays für die Vektorberechnung zugewiesen werden.

Klingt das wie ein sinnvoller Ansatz?

Wenn ja, keine Implementierung Hinweise oder Bibliotheken, die helfen könnten?

War es hilfreich?

Lösung

In einer funktionalen Sprache ist alles Datenfluß. Sie können Funktionen als Modulkonzept verwenden.

Um jeden Ihrer Anwendungsfälle Adresse:

  • A pluggagble Modul ist eine Clojure-Funktion, die ein einzelnes Argument, dass der Zustand Ihres Datenvektor ist. z.B. (def module-a some-function) Damit für eine einfache Erweiterung durch Module, schlage ich vor, eine Clojure Karte als Ihr Zustand verwendet wird, wo ein Feld Array von Schwimmern ist.
  • Composing Module ist Funktion Zusammensetzung. z.B. (def combined-module (compose module-a module-b)
  • Hilfsfunktionen sind Accessorfunktionen, Zustand von Daten zu extrahieren. z.B. Wenn Ihre Daten eine Clojure Karte mit einem :moving-average Feld ist, dann ist das Schlüsselwort :moving-average ist Ihre Accessorfunktion. Staat nicht in Modulen gespeichert.
  • Standardcode ist bei der Umsetzung Ihrer Funktionen versteckt, die überall deklariert werden können, möglicherweise in einer anderen Datei und Namespace.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top