为什么F#核心库不提供通用序列切片功能?

时间:2011-09-26 04:10:40

标签: algorithm f# functional-programming

将序列切割成固定长度的批次,使重叠的滑动数据窗口,从序列中获取每个第n项 - 所有这些任务都可以使用单个通用切片函数来解决。例如,Clojure为此目的提供partition size skiplibrary function

F#核心库提供了Seq.windowed function,它实现了重叠1的滑动窗口。Seq.windowed width简单地等同于partition width 1;变量partition参数允许解决其他问题:partition size size将序列切片为非重叠批次,partition 1 n获取每个第n个序列项等等。

在F#中实现此类功能并不困难。我曾发布a naive prototype,它受到冗余序列评估的影响;然而,使其成为真正懒惰的生产质量F#实施绝对可行。

我想知道是否有任何特殊原因限制开箱即用的F#核心库提供序列切片到Seq.windowed功能?

1 个答案:

答案 0 :(得分:3)

我认为你的问题没有任何好的答案。

当然没有技术上的困难会导致无法实现更通用的滑动窗口功能。它可以实现,它将是有用的。为什么它不包含在F#核心库中?可能是因为F#团队没有尝试包含所有可能的有用功能,因为它会使核心库太大,难以维护和难以使用(如果有太多的话,找到正确的函数会很困难)。