评论者:alexmiller
我只是想提一下,这是我第一次记得查看这个票据,因为它在很大程度上早于我参与Clojure核心的时候。我知道已经过了很多年,我正在试图真正地深入思考这个问题。但我在重新走过你们的路径时,可能还会提一些愚蠢的问题。
我当然同意让好的集合特性能够在Clojure核心内外得到使用。
关于更改协议的可行性,我认为可能你误解了我的意图。我们当然可以更改或扩展协议,但我们只需以一种累积扩展(保留现有内容)的方式去做,而不是破坏(通过更改现有方法签名)的方式。我对更改Sorted.seqFrom()签名的反对意见是,这会破坏所有现有的实现——这完全是不可行的。但是,将Sorted扩展到Sorted2(或任何更有意义的名称)并添加一个新的seqFrom抽象是完全可以接受的。这样,子序列代码就可以如果集合是Sorted2那么做到最好,如果只是Sorted则回退到其他方式。有各种实现方法,但希望你能理解意图——现有内容继续按原样工作,新内容如果可用则会得到利用。
回顾一下,seqFrom及其相关功能似乎不足以涵盖不同数据结构中可能需要的所有功能。我继续认为NavigableSet有很多好的前期思考(并不是说它是直接的答案,但确实是相同的问题领域),并且扩展到其他在间隔年份中添加的其他数据结构,看看我们可以实现什么是有益的。
实际上,子序列的实现相当混乱,依赖于许多运动部件和假设。也许整个子序列操作实际上应该直接由集合来完成。