【问题标题】:how to reduce in reverse so to iterate from the last index and on through until the 0 index?如何反向减少以便从最后一个索引迭代直到 0 索引?
【发布时间】:2019-11-02 17:57:38
【问题描述】:

我希望我的 reduce 调用中的匿名函数能够以相反的顺序对输入列表进行操作。在 javascript 中有一个名为 .reduceRight() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ReduceRight 的函数 clojure 中的等价物是什么?

【问题讨论】:

  • 先颠倒顺序不可行吗?根据您要减少的顺序,这可能会同样(无效)有效。只有具有恒定随机访问的序列才能有效地进行右归约。
  • Clojure Coding Example,但在内部它会在 reduce 之前反转列表。
  • 有关 Clojure 中 foldlfoldr 的示例,请参阅此答案,后者可能更接近您正在寻找的内容:stackoverflow.com/a/41775034/483566
  • 只是颠倒顺序...(defn reduce-right [f coll] (reduce f (reverse coll)))(如果需要可以添加val
  • @Carcigenicate 您的评论对于任何减少权利的实施都是正确的。它不是与 clojure 相关的约束......所以我怀疑它是一个问题。

标签: clojure


【解决方案1】:

您希望从最后一个索引开始迭代,一直到 0 索引。这表明您正在处理类似于矢量的东西。如果是这样,您可以对其应用rseq 函数,它会在恒定时间内产生其参数的相反序列。

Clojure 的向量具有 java 类 PersistentVector。这实现了一个名为Reversible 的接口。这就是rseq 函数要查找的内容。

【讨论】:

    猜你喜欢
    • 2016-05-16
    • 1970-01-01
    • 2020-10-09
    • 2014-09-19
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多