欢迎!请参阅关于页面,了解更多关于此功能的信息。
目前比较两个不相同的序列需要迭代两个序列并逐个比较它们的值,忽略序列 a 和 b 具有相同的(指针相等的)剩余部分的可能性。
a
b
提出的补丁在序列尾端添加了指针相等的检查,如果测试返回 true,则可以短路相等性检查,这在比较共享公共子序列的大(或可能无限)序列时很有帮助。
在这个补丁之后,以下比较 (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,这个补丁避免了这种情况。
ok,看起来CLJ-1515,CLJ-1603和这个补丁一起失败,尽管任意两个都能正常工作。
(实际上这个补丁的源代码没有问题,它仍然能很好地执行短路等于操作,只是在其他两个补丁中结构共享被破坏,所以测试失败)
我明白了,我想如果我们应用了那些票的补丁,我们就必须更改测试。