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 项的列表组成的惰性序列,间隔为步长
。如果未提供 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

我觉得新的措辞并没有更清楚。也不应该把"less"改成"fewer"。

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