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

欢迎!请查看关于页面以了解有关如何使用此信息的一些更多信息。

0投票
ClojureScript

Clojure的sort和sort-by都承诺“保证稳定性:相等的元素不会被重新排序。”

ClojureScript中sortsort-by当前实现来自

9ee4dbf63d3968b70f29708aa03aace98cdcb624 作者:Stuart Halloway <[email protected]> 作者日期:Thu Jul 14 12:18:34 2011 -0500

`
(defn sort
"返回coll中项的排序序列。Comp可以是
布尔值比较函数,或值比较器。
Comp默认为compare。
([coll]
(sort compare coll))
([comp coll]
(if (seq coll)

 (let [a (to-array coll)]
   ;; matching Clojure's stable sort, though docs don't promise it
   (garray/stableSort a (fn->comparator comp))
   (seq a))
 ())))

(defn sort-by
"返回coll中项的排序序列,排序
顺序由(keyfn item)确定。Comp可以是
布尔值比较函数,或值比较器。
Comp默认为compare。
([keyfn coll]
(sort-by keyfn compare coll))
([keyfn comp coll]

 (sort (fn [x y] ((fn->comparator comp) (keyfn x) (keyfn y))) coll)))

`

由于此实现似乎已经连续8年调用了google的stableSort,或许文档字符串可以进行修改以反映这一点。

参考资料,google closure数组文档:(链接:https://google.github.io/closure-library/api/goog.array.html

请注意,stableSort的文档字符串实际上没有提到稳定性,但排序函数中包含“此排序无法保证稳定性。”

5 个答案

0投票

评论者:seancorfield

(来自Slack上的讨论,我提供了以下意见,有人建议我将它添加到此工单中)

我认为最好明确指出

Guaranteed to be stable: equal elements will not be reordered.

或者

Not guaranteed to be stable.

这样,开发者将知道他们可以信赖稳定性,或者他们不应该依赖它(尽管当前实现恰好是稳定的)。

0投票

评论者:pbwolf

Clojure 的 sort 文档称,“保证是稳定的:相等的元素不会重新排序。”之前它是稳定的,但没有做这样的记录。见https://dev.clojure.org/jira/browse/CLJ-1414

我希望 CLJS 将(a)以同样的方式稳定,并且(b)匹配 Clojure 的稳定性文档。

0投票

评论者:saurabh

如果这个问题仍未解决,我希望参与这项工作。

0投票

评论者:dnolen

去做吧,你提交了你的 CA(Code of Conduct Agreement)了吗?

0投票
参考: https://clojure.atlassian.net/browse/CLJS-3035(由 dpsutton 提出)
...