评论区由:alexmiller 发表
我只是想指出,这是我第一次记住查看这个票据,因为它基本上早于我在Clojure核心中的参与。我知道这一切已经过去多年了,我正在努力真诚地思考这个问题。但在我重新走过的路上,我可能会提出一些愚蠢的问题。
我确实同意,让良好的集合特性能够在Clojure核心内外部使用。
关于更改协议的可行性,我认为您可能误解了我的意图。我们当然可以更改或扩展协议,但我们只需要以一种渐进(保留现有内容)而不是破坏(通过更改现有方法签名)的方式进行。我的反对意见是更改Sorted.seqFrom()的签名,因为这会破坏所有现有实现——这根本不可行。但将Sorted扩展到Sorted2(或任何更有意义的名字)并添加新的seqFrom参数是完全可行的。子序列代码可以在集合是Sorted2的情况下执行最佳操作,如果只是Sorted,则回退到其他选项。有多种方法可以实现这一点,但希望您理解意图——现有内容继续按原样工作,如果可用,则利用新功能。
退回到一开始,seqFrom和其他功能似乎不足以覆盖不同数据结构可能需要的所有内容。我仍然认为NavigableSet有很多好的先验思想(并不是说它是直接答案,但它确实是同一个问题领域),并且研究一下近年来添加的其他数据结构可能会让我们有所作为。
实际上,子序列功能的实现相当粗糙,依赖于很多移动部件和假设。也许应该将整个子序列操作直接交给集合来执行。