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

欢迎!请查看关于页面了解更多关于该功能的信息。

+1 投票
文档

分区文档中说明:"如果不足足够的填充元素,则返回少于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个元素的列表组成的惰性序列,偏移量为step。
如果没有提供step,则默认为n,即分区不重叠。
没有提供填充集合时,从输入集合长度除以n得到的尾部任意元素将不会包含在一个分区中。
如果提供了填充集合,则使用其元素作为需要完成最后一个分区的n个元素的填充。
如果没有足够的填充元素,则返回少于n个元素的分区。

补丁: clj-1117.patch

7 个回答

0 投票

由jafingerhut发表的评论

这将对一些使用partition的人的代码造成潜在的破坏性变化。partition-all的行为如你所愿。

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

0 投票

由halgari发表的评论

我同意,但我认为文档应该明确指出:“如果没有提供填充,则输出分区可能不会返回所有输入元素”或类似的表述。

0 投票

由jafingerhut发表的评论

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

0 投票

评论者:cldwalker

我已经上传了一个补丁,指出了在何时以及如何分区丢弃元素
“如果没有提供填充集合,则从按 n 划分输入集合长度后剩余的任何尾元素将不包括在一个分区中。”

0 投票

评论者:arichiardi

我对这一点很困惑,特别是,我无法弄清楚为什么(partition 2 3 (链接:1 2 3 4 5 6 7))不是'((1 2) (4 5) (7)) ... 真的最好重写那条注释。

0 投票

评论者:stu

我发现新的措辞并没有更清楚。它也没有将/s/less/fewer

0 投票
...