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

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

+3
math.combinatorics
重新标记

当调用 items 中包含一些重复项,并提供了 :min:max 参数时,clojure.math.combinatorics/partitions 可能会抛出 IndexOutOfBoundsException。例如
(dorun (clojure.math.combinatorics/partitions [1 1 2 3 4 5] :min 5 :max 5)) 执行错误 (IndexOutOfBoundsException) 在 clojure.math.combinatorics/m5$fn (combinatorics.cljc:859).
items 中没有至少一个是重复项时,我就无法复制这个问题,当 :min 不至少是 5 时,我也无法复制它。我认为必须提供 :max,但并不总是需要等于 :min
这也发生在非数字项上,且与 items 的顺序无关。它似乎是在第一个项目被重复时发生,但不是对其他项目。

1 答案

+1
by
被选中 by
 
最佳答案

这是我对问题验证(以及发现一些额外问题,如 :min 5 单独会导致堆空间错误)后尝试的补丁:https://clojure.atlassian.net/browse/MCOMB-11

我想知道这能否修复您找到的其他情况!

by
是的,这似乎修复了所有我发现的异常情况。也许要知道它似乎还修复了一个堆栈溢出错误也是有用的。

```
(dorun (combo/partitions [3 2 7 7 14 5 3 4 9 2] :min 2 :max 2))
;; => 执行错误(StackOverflowError)在 clojure.math.combinatorics/m5 (combinatorics.cljc:870)。
```

我确信有一个更简单的示范,但我还没有找到它。

谢谢!
...