我正在 Clojure 中开发一些需要处理大量矢量数据的模拟软件(基本上源自 Java 浮点数组的偏移量,长度通常在 10-10000 范围内)。大量这些向量将需要经过各种处理步骤 - 例如标准化向量、将两个向量流连接在一起、计算移动平均值等。
我希望做的不是以命令式风格做所有事情,而是创建一个更具函数式风格的 Clojure 解决方案,该解决方案将执行以下操作:
- 允许将任何向量函数转换为可插入模块,例如 (def module-a (make-module some-function))
- 允许在管道中组合这些模块,例如 (def combine-module (combine-in-series module-a module-b)) 会将 module-a 的输出馈送到 module-b 的输入
- 允许辅助函数访问存储在给定模块中的状态,例如(get-moving-average some-moving-average-module),即使 some-moving-average-module 嵌入到组合管道中的深处,它也需要工作
- 在幕后隐藏任何样板代码,例如为向量计算分配足够大的临时数组。
这听起来像一个明智的方法吗?
如果是这样,任何可能有帮助的实现提示或库?