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中项的排序序列。Comp可以是
布尔值比较函数或值为- / 0 / +的比较器。
默认值为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可以是
布尔值比较函数或值为- / 0 / +的比较器。
默认值为compare。
([keyfn coll]
(sort-by keyfn compare coll))
([keyfn comp coll]

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

`

该实现已经显然调用了google的stableSort长达8年,也许文档字符串可以修改以反映这一事实。

仅供参考,google closure array文档: (链接: 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吗?

0
参考:https://clojure.atlassian.net/browse/CLJS-3035(由dpsutton报告)
...