gpt4 book ai didi

clojure - 通俗地解释一下 `core.reducers`库

转载 作者:行者123 更新时间:2023-12-03 00:06:48 29 4
gpt4 key购买 nike

我目前正在学习 clojure 来娱乐,今天我遇到了这个 article about reducers 。我发现它不仅有趣而且对我来说很棘手。作为初学者:

  1. 我知道如何使用核心mapfilterreduce

  2. 我知道core/mapcore/filter...返回一个seqablecol

    <
  3. Rich Hickey 提到core.reducers/map...返回一个可简化 col

因为 core/map... 和 core.reducers/map... 的实现看起来非常相似。我的问题是

  1. 用外行术语来说,reducible col 有何不同?

  2. 任何人都可以给我一些可简化函数的简单示例吗?

非常感谢

最佳答案

对我来说, reducer 的主要思想是它们实际上少于 map/filter/reduce 。 reducer 不指定它们是延迟执行还是急切执行、串行执行还是并行执行、在集合上还是在另一种类型的数据结构上执行,以及它们生成的内容可能是集合或其他东西。示例:

  1. map/filter/reduce 必须传递一个集合并且必须生成一个收藏; reducer 也不必这样做。 reducer 的这个想法是扩展于transducers以便相同的传感器可以应用于任一一个集合或一个core.async channel 。

  2. Reducers 也不指定它们如何执行。 map/filter/reduce始终以串行方式执行收藏;永远不会并行。如果你想跨a执行并行收集时,必须使用不同的函数:pmap 。你可以想象,如果你想并行过滤,你可以还创建一个函数pfilter (这不存在,但你可以写它)。 reducer 不是创建每个函数的并行版本,而是简单地说“我不在乎我是如何被处决的”,这取决于另一个函数( fold对于 reducer )来决定是否应该并行执行。 foldpmap 更通用因为它所适用的 reducer 可以进行过滤或映射(或组合两者)。

一般来说,由于 reducer 对它们适用于什么它们产生什么它们如何应用做出的假设较少,所以它们更灵活,因此可以在更广泛的情况下使用。这很有用,因为 reducer 关注的是“你的程序做了什么”而不是“它是如何做的”。这意味着您的代码可以发展(例如,从单线程到多线程,甚至到分布式应用程序),而不必触及程序中构成代码功能核心逻辑的部分。

关于clojure - 通俗地解释一下 `core.reducers`库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25681197/

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