F#的Itertools

时间:2013-04-11 23:17:58

标签: f# itertools

我习惯Python's itertools用迭代器(F#:sequences)做功能性事情,并想知道F#中是否有等价物或者是常用的库,因为它们非常方便。

我的顶级工具是:

  • 产品:笛卡尔积,相当于嵌套的for循环
  • 组合
  • 排列
  • takewhile
  • dropwhile
  • chain:将多个迭代器链接到一个新的更长的迭代器
  • 重复*:重复(5) - > 5,5,5 ......
  • count *:count(10) - > 10,11,12 ......
  • 周期*:周期([1,2,3]) - > 1,2,3,1,2 ...

*我认为这3个会在F#中产生monad?你如何让它们变得无限?

我被提示问,因为我看到了this question on permutations in F#并且感到惊讶的是它不是图书馆的一部分或是内置于该语言中。

1 个答案:

答案 0 :(得分:5)

我不知道是否有一个常用的库包含产品,组合和排列等功能,但您提到的其他库已经在SeqList模块中,或者可以实现没有太多麻烦,System.Linq.Enumerable中还有一些有用的方法。

  • takewhile - > Seq.takeWhile
  • dropwhile - > Seq.skipWhile
  • chain - > Seq.concat
  • repeat - > Seq.initInfinite
  • count(10) - > Seq.initInfinite ((+) 10)
  • cycle([1, 2, 3]) - &gt; Seq.concat <| Seq.initInfinite (fun _ -> [1; 2; 3])

您可能还想查看优秀的FSharpx库 - 它包含许多有用的函数来处理集合等等。