【发布时间】:2020-11-17 18:38:27
【问题描述】:
我仍在尝试更好地了解如何在 clojure 中使用传感器。在这里,我有兴趣应用聚合转换器,例如 https://github.com/cgrand/xforms 中的转换器,但在每一步都报告计算的中间值。
比如下面的表达式
(sequence (x/into #{}) [1 2 3])
产生(#{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:另一种表述方式是,我想要一个执行归约功能并在每一步返回累加器的转换器,它还可以重用所有可用的转换器,因此我不需要重写基本功能。
【问题讨论】:
标签: clojure transducer