gpt4 book ai didi

clojure - 有人可以用简单的术语向我解释 Clojure Transducers 吗?

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

我已经尝试阅读此内容,但我仍然不明白它们的值(value)或它们取代的内容。它们会让我的代码更短、更容易理解吗?

更新

很多人都发布了答案,但很高兴看到有和没有传感器的例子,这些例子非常简单,即使是像我这样的白痴也能理解。当然,除非传感器需要一定的高水平的理解,在这种情况下我永远不会理解它们:(

最佳答案

传感器是在不知道底层序列是什么(如何做)的情况下如何处理数据序列的秘诀。它可以是任何 seq、异步 channel 或者可能是可观察的。

它们是可组合的和多态的。

好处是,您不必在每次添加新数据源时都实现所有标准组合器。一次又一次。因此,您作为用户可以在不同的数据源上重复使用这些配方。

在 Clojure 1.7 版本之前,您可以通过三种方式编写数据流查询:

  1. 嵌套调用

    (reduce + (filter odd? (map #(+ 2 %) (range 0 10))))
  2. 功能组合

    (def xform
    (comp
    (partial filter odd?)
    (partial map #(+ 2 %))))
    (reduce + (xform (range 0 10)))
  3. 线程宏

    (defn xform [xs]
    (->> xs
    (map #(+ 2 %))
    (filter odd?)))
    (reduce + (xform (range 0 10)))

使用传感器,你可以这样写:

(def xform
(comp
(map #(+ 2 %))
(filter odd?)))
(transduce xform + (range 0 10))

他们都做同样的事情。不同之处在于,您从不直接调用转换器,而是将它们传递给另一个函数。传感器知道要做什么,传感器的功能知道如何做。组合器的顺序就像你用线程宏编写的一样(自然顺序)。现在您可以将 xform 与 channel 重用:

(chan 1 xform)

关于clojure - 有人可以用简单的术语向我解释 Clojure Transducers 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26317325/

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