欢迎!请参阅关于页面以获取有关如何操作的更多信息。
目前比较两个非相同的有序序列需要遍历两个序列,按值比较,忽略有序序列 a 和 b 具有相同的(指针相等的)剩余部分的可能性。
a
b
建议的补丁在有序序列尾部添加了指针相等性检查,如果测试结果为真,可以使比较短路,这在比较具有公共子序列的大型(或可能是无限)有序序列时很有帮助。
在此补丁后,像以下这样的比较 (let [x (range)] (= x (cons 0 (rest x))))目前在当前不会结束,返回真值在常数时间内。
(let [x (range)] (= x (cons 0 (rest x))))
补丁: CLJ-1679-v3.patch
评论者:michaelblume
当这个测试失败(它在我的master上失败,但我还有许多其他开发补丁,我仍在找出冲突所在)时,它会永久挂起。也许更好的办法是对未来进行相等性检查,并使未来超时?
这样等于 вс Frequenz)
评论由:bronsa 发表
很有道理,感谢更新补丁
嗯,之前的补丁有一个问题,报告中仍然试图强制执行序列和 OOM,这个补丁可以防止这种情况。
好的,看起来 CLJ-1515、CLJ-1603 和这个补丁都一起失败,尽管任何两个都可以正常工作。
实际上这个补丁的来源并没有问题,它仍然能够在有结构共享的情况下短路 (优化操作),只是其他两个补丁打破了范围的结构共享,所以测试失败了)
明白了,如果我们应用这些票证的相关补丁,我们可能不得不更改测试。