评论者:alexmiller
我只想说一下,这还是我第一次记住查看这个票证,因为它基本上在大约我参与 Clojure 核心之前就已经存在了。我知道已经过去好几年,我正在实际上诚实地点评这一问题。但我在重新走过您已经走过的路上时可能会问一些愚蠢的问题。
我确实认同让好的集合特性能够被 Clojure 核心和外部都用的 impls 利用。
关于改变协议的可行性,我认为你可能误解了我的意图。我们当然可以更改或扩展协议,但我们只需要以一种扩展而不是打破的方式(通过更改现有方法签名)来这样做。我的反对意见是更改 Sorted.seqFrom() 的签名,这会破坏所有现有的实现 - 这根本是不可行的。但是,将 Sorted 扩展到 Sorted2(或者 whatever 更有意义的名字)并添加新的 seqFromари完全没问题。子序列代码可以在集合是 Sorted2 的情况下执行最佳操作,如果只是 Sorted,则回退到其他操作。有各种方法来实现这一点,但希望你能理解意图 - 现有的东西无需更改即可继续工作,如果可用,则可以利用新事物。
回过头来说,seqFrom 和类似的功能可能不足以涵盖不同数据结构可能需要的所有内容。我继续认为 NavigableSet 有很多很好的先入为主的思考(我不是说它是一个直接的答案,但它确实是同一个问题区域),并且广泛地看看在过去的几年中添加的其他数据结构可能会有很大的好处,看看我们可以实现什么。
实际上,子序列的全部实现相当恶心,依赖于许多移动部件和假设。也许整个子序列操作实际上应该直接由集合完成。