我仍在尝试更好地了解如何在 clojure 中使用传感器。在这里,我有兴趣应用聚合传感器,例如https://github.com/cgrand/xforms中的传感器,但在每一步都报告计算的中间值。
例如,下面的表达式
(sequence (x/into #{}) [1 2 3])
yield (#{1 2 3})
,这只是减少的最终值。xf-incremental
现在,我会对给出类似的换能器感兴趣
(sequence (comp xf-incremental (x/into #{})) [1 2 3])
产量(#{1} #{1 2} #{1 2 3})
。
我对此感兴趣的原因是我想报告一个指标的中间值,该指标聚合了已处理值的历史记录。
知道如何以通用方式进行此类操作吗?
编辑:将 (x/into #{}) 视为聚合结果的任意转换器。更好的例子可能是我期望的 x/avg 或 (x/reduce +)
(sequence (comp xf-incremental x/avg) [1 2 3])
(sequence (comp xf-incremental (x/reduce +)) [1 2 3])
返回(1 3/2 2)
和(1 3 6)
分别。
编辑2:另一种表述方式是,我想要一个执行缩减功能并在每一步返回累加器的转换器,它还可以重用所有可用的转换器,因此我不需要重写基本功能。