多くのベクトルデータを処理する必要があるClojureでいくつかのシミュレーションソフトウェアを開発しています(基本的には、Java floatの配列へのオフセットとして発生し、通常は10〜10000の範囲の長さです)。これらの多数のベクトルは、ベクトルの正規化、ベクトルの 2 つのストリームの連結、移動平均の計算など、さまざまな処理ステップを経る必要があります。
すべてを命令型スタイルで行うのではなく、次のことを行う、より機能的なスタイルの Clojure ソリューションを作成することを望んでいました。
- 任意のベクトル関数をプラグ可能なモジュールに変換できるようにします。例: (def module-a (make-module some-function))
- これらのモジュールをパイプラインで構成できるようにします。たとえば、(def combined-module (combine-in-series module-a module-b)) は、module-a の出力を module-b の入力にフィードします。
- 補助関数が特定のモジュール内に格納された状態にアクセスできるようにする (get-moving-average some-moving-average-module など)。これは、some-moving-average-module が結合されたパイプラインの奥深くに埋め込まれている場合でも機能する必要があります。
- ベクトル計算用に十分な大きさの一時配列を割り当てるなど、ボイラープレート コードを舞台裏に隠します。
これは賢明なアプローチのように聞こえますか?
もしそうなら、役立つ実装のヒントやライブラリはありますか?