【发布时间】:2015-09-05 10:43:00
【问题描述】:
我正在做一个减少,我想累积并返回一个向量。这样做时效果很好:
(reduce
(fn [[res-vec last-rgb] rgb]
(let [calc-res (mu/colour-distance-L2 last-rgb rgb)
accum-results (conj res-vec calc-res)]
[accum-results rgb]))
[]
colour-selections)
但是,当[] 参数被忽略时,我得到Caused by: java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Long。这是因为colour-distance-L2 被赋予了至少一个java.lang.Long 而不是它所期望的两个向量(type [r g b] 的两个向量 - 用于红色绿色和蓝色)。
This 正是我正在做的那种减少。
我不需要使用 3 元版本的 reduce,因为 colour-selections 的大小始终至少为 2。我只是将 [] 作为试错的一部分 em> 越过运行时错误。事实证明,这样做会产生很好的效果。
有什么方法可以在这里使用 2-arity 版本的 reduce 吗?
【问题讨论】:
-
I do not need to use the 3-arity version of reduce, because colour-selections will always have a size of at least 2.我什至不知道是什么让你这么想。如果输入序列的第一个元素与累加器的类型不同,则需要 3 arity 版本。 -
这是我的第一个 Clojure reduce。我习惯了 Scala 折叠,你总是有一个“种子”,所以以前从来没有真正用过这些术语。
标签: clojure