评论者:alexmiller
我只是想提一下,这是我第一次记得查看这个工单,因为它基本上在我的Clojure核心参与之前。我知道已经过去很多年了,我实际上在尝试诚实地思考这个问题。但我可能在你走过的每一步都会问一些愚蠢的问题。
我确实同意让良好的集合特性能够在Clojure核心内部和外部被实现所使用。
关于更改协议的可行性,我认为可能你在那里误解了我的意图。我们当然可以更改或扩展协议,但我们只需要以扩展(保留现有内容)而不是中断(通过更改现有方法签名)的方式去做。我反对的是更改Sorted.seqFrom()的签名,这会破坏所有现有的实现 - 这绝对是不可能的。但是,将Sorted扩展到Sorted2(或任何更有意义的名称)并添加seqFrom的新算子是完全可以接受的。如果coll是Sorted2,子序列代码可以做到最好,如果不是,则回退到其他内容。有各种各样的方式来做这件事,但希望你能理解意图——现有的内容继续按原样工作,而新的内容如果可用则可以被利用。
回顾起来,似乎seqFrom及其相关功能没有足够丰富,无法涵盖不同数据结构中可能需要的所有内容。我继续认为NavigableSet有很多好的前期思考(并不是说它是直接的答案,但它实际上是同一个问题领域),并且更广泛地研究近年来加入的一些其他数据结构,看看我们能实现什么是有益的。
事实上,子序列的全套实现相当粗糙,依赖于许多移动部件和假设。也许该给集合做一个直接实现的任务。