Я разрабатываю некоторое программное обеспечение для моделирования в Clojure, которое должно будет обрабатывать много векторных данных (в основном в виде смещений в массивах Java-плавающих объектов, длина которых обычно находится в диапазоне 10-10000).Большое количество этих векторов должно пройти различные этапы обработки - например, нормализация векторов, объединение двух потоков векторов, вычисление скользящего среднего и т. Д.
Вместо того, чтобы делать все в императивном стиле, я надеялсянужно было создать решение Clojure с более функциональным стилем, которое бы выполняло следующие действия:
- позволяло превращать любую векторную функцию в сменный модуль , например (def module-a(make-module some-function))
- позволяют этим модулям быть составленными в конвейеры , например (def комбинированный модуль (объединенный модуль-модуль-a-b))будет подавать выходные данные модуля -a на вход модуля-b
- , позволяющий вспомогательным функциям получать доступ к состоянию, хранящемуся в данном модуле, например (получить скользящее среднее и некоторое перемещениесредний модуль), который должен был бы работать, даже если какой-то модуль скользящей средней встроен глубоко в объединенный конвейер
- скрыть любой шаблонный код behiи сцены, например, выделение достаточно больших временных массивов для векторного вычисления.
Похоже ли это на разумный подход?
Если это так, какие-либо советы по реализации или библиотеки, которые могут помочь?