Clojure 2024状态调查中分享您的想法!

欢迎!请参阅关于页面,了解更多关于此功能的信息。

0投票
集合

目前比较两个不相同的序列需要迭代两个序列并逐个比较它们的值,忽略序列 ab 具有相同的(指针相等的)剩余部分的可能性。

提出的补丁在序列尾端添加了指针相等的检查,如果测试返回 true,则可以短路相等性检查,这在比较共享公共子序列的大(或可能无限)序列时很有帮助。

在这个补丁之后,以下比较
(let [x (range)] (= x (cons 0 (rest x))))
这将目前在恒定时间内返回 true,而不是像现在这样无法终止。

补丁: CLJ-1679-v3.patch

8 个答案

0投票

评论由:michaelblume

当这个测试失败时(它在我的master上失败,但我有许多其他开发补丁,我还在寻找冲突的地方),它会无限期地挂起。也许会更适合在将来检查相等性并超时未来?

0投票

评论由:michaelblume

以这种方式:=)

0投票

评论由:bronsa

说得通,感谢更新补丁

0投票

评论由:michaelblume

嗯,之前的补丁有一个问题,报告逻辑仍然试图强制执行序列和OOMs,这个补丁避免了这种情况。

0投票

评论由:michaelblume

ok,看起来CLJ-1515,CLJ-1603和这个补丁一起失败,尽管任意两个都能正常工作。

0投票

评论由:michaelblume

(实际上这个补丁的源代码没有问题,它仍然能很好地执行短路等于操作,只是在其他两个补丁中结构共享被破坏,所以测试失败)

0投票

评论由:bronsa

我明白了,我想如果我们应用了那些票的补丁,我们就必须更改测试。

0投票
参考:https://clojure.atlassian.net/browse/CLJ-1679(由bronsa报告)
...