You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Transducers:嵌套step返回reduced时complete arity应如何处理?

有状态转换器遇到reduced时的complete arity处理逻辑

有状态转换器通常需要在调用complete arity(即([result]))前,按需调用step arity(即([result input]))刷新状态。但如果嵌套的step arity返回reduced触发提前终止,complete arity该如何处理?

根据Clojure官方文档:

在完成步骤中,带归约状态的转换器应先刷新状态,再调用嵌套转换器的完成函数,除非之前从嵌套step收到过reduced值,此时需丢弃待处理状态。

不过文档里的“之前收到过”存在三种不同解读:

  • 仍调用嵌套step arity刷新状态;
  • 忽略自身状态,仅调用嵌套complete arity;
  • 不调用嵌套转换器的任何arity。

通过分析Clojure内置转换器的实现可以找到参考:

  • partition-by:符合第一种情况——在complete步骤中调用嵌套step处理剩余状态,移除reduced标记后再调用嵌套的complete arity。
  • cat:在step arity中会给reduced结果再包裹一层reduced标记;
  • take-while:其step与complete arity的逻辑看起来相互独立。

结合Rich Hickey在《Inside Transducers》中的表述:当底层函数告知提前终止时,转换器应停止积累,进入无状态可刷新的状态。那么核心疑问是:转换器遇到reduced值时,是否应该在step arity中清除积累的状态并返回reduced值,然后在complete arity中直接传递结果?

内容的提问来源于stack exchange,提问作者drRobertz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 10:04:59