评论由:alexmiller
我只是想提到这是我第一次记得查看这个票据,因为它很大程度上早于我在 Clojure 核心中所参与的活动。我知道过去几年了,我尝试真诚地思考这一点。但在我重现你的任何路径时,我可能还会提出一些愚蠢的问题。
我肯定同意使好的集合特性能够被 Clojure 核心内外部的实现所利用。
关于更改协议的可行性,我认为你可能误解了我的意图。我们当然可以更改或扩展协议,但我们只需以一种可以增长(保留现有内容)而不是破坏(通过更改现有方法签名)的方式来做。我对更改Sorted.seqFrom()签名的反对意见是,这会破坏所有现有的实现 - 这根本不可行。但将Sorted扩展到Sorted2(或任何更有意义的名字)并引入新的seqFrom算术是完全可以接受的。然后子序列代码可以在集合是Sorted2的情况下执行最佳操作,如果只是Sorted,则回退到其他操作。有多种方法可以实现这一点,但希望你能理解意图 - 现有内容保持不变,如果有新内容可以利用。
回顾一下,seqFrom及其相关内容似乎不足以涵盖不同数据结构可能需要的所有内容。我仍然认为NavigableSet有很多好的前期思考(我不是说它是一个直接的答案,但它是同一个问题区域),看一看近几年添加的其他一些数据结构,看看我们能做什么是有益的。
实际上,子序列的全部实现相当粗糙,依赖于很多可动部件和假设。也许整个子序列操作应该直接交给集合直接执行。