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

欢迎!请查看 关于 页面获取有关它如何工作的更多信息。

+1
文档

partition文档中指出,“如果填充元素不足,返回小于n个元素的分区。”然而,这个函数的行为如下:

user=> (partition 3 (range 10)) ((0 1 2) (3 4 5) (6 7 8)) user=> (partition 4 (range 10)) ((0 1 2 3) (4 5 6 7))

建议: 建议文档更新(加粗部分)

返回由n个元素的列表组成的懒惰序列,步长为步。
如果没有提供步长,则默认为n,即分区不重叠。
如果没有提供填充集合,则在将输入集合长度除以n后剩余的任何尾部元素都将不会包含在任何分区中。
如果提供了填充集合并需要使用其元素来完整地填充最后一个分区至n个元素。
如果没有足够的填充元素,将返回小于n个元素的分区。

补丁: clj-1117.patch

7 答案

0

评论人:jafingerhut

这将可能破坏某些使用partition的代码,因为partition-all的行为如你所愿。

此外,你关于文档的担忧是针对当作为参数指定了填充元素时,但你的示例没有指定任何填充元素。

0

评论由:halgari

我同意,但我觉得文档应该明确指出:“如果没有给出填充,输出分区内可能不包含所有输入元素”或类似的语句。

0

评论人:jafingerhut

在我看来,更精确地说明当前行为总是受欢迎的。

0

评论由:cldwalker

我已经上传了一个补丁,指出何时以及如何舍弃分区末尾的元素
"如果没有提供填充集合,则输入集合长度除以n后的任何剩余末尾元素都不会包含在分区内。"

0

评论由:arichiardi

我对这一点也有些困惑……特别是,我无法理解为什么(分区2 3(链接:1 2 3 4 5 6 7))不是 '((1 2) (4 5) (7))……最好重写那条注释。

0

评论由:stu

我认为新的措辞并没有更清晰。而且,它没有把 'less' 改成 'fewer'。

0
参考: https://clojure.atlassian.net/browse/CLJ-1117 (由halgari报告)
...