在Clojure中完成函数的功能是什么?

Ert*_*tin 4 clojure transducer

我遇到completingclojuredocs的功能,但目前还没有doc.

你能提供一些例子吗?

Mic*_*zyk 12

completing 用于增加二进制减少函数,该函数可能没有一元"完成"arity的一元过载.

托管@ clojure.org 的官方传感器参考页面解释了传感函数的无效,一元和二元重载的目的,并且包含了一个很好的例子,说明一元"完成"在"创建传感器"一节中是否有用(示例) used是partition-all使用完成来产生最终的输出块).

简而言之,在所有输入被消耗之后使用完成arity并且使转换函数有机会执行任何工作以清除转换过程可能维持的任何缓冲区(如在情况中partition-all),将任何最终转换应用于输出(这里通过"转换功能"来表示转换功能实际上与所有包装换能器一起传递给transduce(或者eduction或者任何建立换能过程的类似功能).

有关completing使用非平凡完成函数的一个有趣示例,请查看Christophe Grand的xforms:它net.cgrand.xforms.rfs/str是一个transduce友好版本clojure.core/str,它将在线性时间内建立一个字符串,用于transduce通话.(相反,clojure.core/str如果在reduce/中使用transduce,则会在每一步创建一个新字符串,因此在O(n²)时间内运行.1)它用于completingStringBuilder消耗所有输入时使用的字符串转换为字符串.这是一个稳定的链接,它定义为主分支的当前提示.


1但是,请注意,clojure.core/str如果使用的话,它会以线性时间运行apply- 它使用StringBuilder引擎盖下的内容net.cgrand.xforms.rfs/str.不时地使用transduce友好版本(用于换能器,或者在高阶上下文中,或者可能出于性能原因处理大型集合时可以比使用的via first/ nextlooping 更有效str) .