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

欢迎!请参阅 关于 页面获取该服务的更多信息。

0 投票
ClojureScript

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

ClojureScript 中的 sort 和 sort-by 的当前实现来自

9ee4dbf63d3968b70f29708aa03aace98cdcb624 作者:Stuart Halloway <[email protected]> 日期:2011 年 7 月 14 日 周四 12:18:34 -0500

`
(defn sort
"返回 coll 中项的排序序列。比较函数可以是布尔值比较函数,也可以是值比较函数。
比较器默认为 compare。
如果提供了 [coll]
(sort compare coll))
([comp coll]
(if (seq coll)
(defn sort-by

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

"返回 coll 中项的排序序列,排序顺序由 (keyfn item) 决定。
比较函数可以是 [keyfn coll]
(sort-by keyfn compare coll))
比较器默认为 compare。
如果提供了 [coll]
([keyfn comp coll]
此实现显然已经调用了 google 的 stableSort 有 8 年了,可能文档字符串可以修改以反映这一点。
参考资料,google closure array 文档:(链接:https://google.github.io/closure-library/api/goog.array.html

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

`

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

请求

jira

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 吗?

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