2024年Clojure调查中分享您的想法!

欢迎!有关如何使用此服务的更多信息,请查阅关于页面。

+3
data.int-map

reduce-kv在优先级映射上调用reducing函数时,为什么要以item作为键,priority作为值(源代码),而不是使用映射的键和值。调用reduce则会传递映射的键和值。我猜测这与特定数据结构的起源有关,但我在clojure.data.priority-map名称空间中找不到任何指向该处的文档。以下是一个示例。

(def m
  (clojure.data.priority-map/priority-map-keyfn-by first compare
    :a [2 :apples] :b [1 :bananas]))

(reduce-kv
  (fn [acc k v]
    (assoc acc k v))
  {} m)
=> {:b 1, :a 2}

(reduce
  (fn [acc [k v]]
    (assoc acc k v))
  {} m)
=> {:b [1 :bananas], :a [2 :apples]}

这是预期的行为吗?如果是这样,我们能否添加一些文档,说明PersistentPriorityMap上的reduce-kv应该如何工作?

1 答案

0

这应该是一个bug。
https://github.com/clojure/data.priority-map/blob/master/src/main/clojure/clojure/data/priority_map.clj#L396

或许(reduce (fn [a v] (f a v k)) a [k v])将是一个正确的解决方案。不一定。

...