gpt4 book ai didi

clojure - Clojure 中的完成函数有什么作用?

转载 作者:行者123 更新时间:2023-12-04 22:18:50 27 4
gpt4 key购买 nike

我在 clojuredocs 上遇到过 completing 函数,但目前没有文档。

你能提供一些例子吗?

最佳答案

completing 用于扩充可能没有具有一元“完成”元数的一元重载的二元归约函数。

The official transducers reference page 托管@clojure.org 解释了转换函数的空元、一元和二元重载的目的,并包括一个很好的示例,说明何时一元“完成”元数在“创建转换器”一节中很有用(使用的示例是使用完成的 partition-all产生最后的输出块)。

简而言之,在所有输入被消耗后使用完成参数,并为转换函数提供机会执行任何工作以刷新转换过程可能维护的任何缓冲区(如 partition-all 的情况),将任何最终转换应用于输出(请参阅下面的示例)等。这里的“转换函数”是指实际传递给 transduce(或 eduction 或设置转换过程的任何类似函数)的转换函数以及所有包装传感器。

有关 completing 与非平凡完成函数一起使用的有趣示例,请查看 Christophe Grand 的 xforms : net.cgrand.xforms.rfs/strtransduceclojure.core/str 友好版本,当在 transduce 调用中使用时,它将在线性时间内构建一个字符串。 (相比之下, clojure.core/str ,如果在 reduce/transduce 中使用,将在每一步创建一个新字符串,并因此在 O(n²) 时间内运行。1)它使用 completing 将它在后台使用的 StringBuilder 转换为字符串一旦它消耗了所有输入。 Here's a stable link to its definition as of the current tip of the master branch.

1 但是请注意,如果与 clojure.core/str 一起使用,apply 会在线性时间内运行——它在底层使用 StringBuilder,就像 net.cgrand.xforms.rfs/str 一样。时不时有一个 transduce 友好版本仍然很方便(用于转换器,或在高阶上下文中使用,或者可能出于性能原因,在处理可以比通过 first/next 循环更有效地减少的大型集合时str 使用的)。

关于clojure - Clojure 中的完成函数有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44423247/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com