欢迎!有关本网站的更多信息,请参阅关于页面。
目前比较两个非相同的seq需要遍历两个seq,逐个比较值,忽略seq a 和 b 具有相同的(指针相等)剩余部分的可能性。
a
b
此补丁在seq尾部添加了指针相等性检查,如果测试返回true,则可以使得相等性短路,这对于比较具有公共子序列的大型(或可能是无限)seq非常有用。
在此补丁之后,比较如下 (let [x (range)] (= x (cons 0 (rest x))))目前在当前不会终止的比较,在常数时间内返回true。
(let [x (range)] (= x (cons 0 (rest x))))
补丁: CLJ-1679-v3.patch
由:michaelblume
当这个测试失败(它在我的master上失败,但我有很多其他开发补丁,我还在找出冲突在哪里),它会无限期地挂起。也许检查相等性要更保险一点,并设置超时时间?
这样 =)
由:bronsa
有道理,感谢更新补丁
嗯,前一个补丁有问题,报告逻辑仍然试图强制序列和OOMs,这个补丁防止了这种情况。
好吧,看起来CLJ-1515、CLJ-1603和这个补丁结合起来会同时失败,尽管任意两个都可以正常工作。
(真正的问题是这个补丁的源代码没有任何问题,它仍然可以很好地短路 = 当存在结构共享时,只是其他两个补丁破坏了范围的结构共享,因此测试失败)
明白了,如果那些票的补丁被应用,我们可能需要更改测试。