2013-04-11 25 views
4

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

对我来说,顶部工具有:

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

*我想这3个会在F#中产生单子吗?你如何让他们无限?

系统提示我问,因为我看到了this question on permutations in F#,并且很惊讶它不是图书馆的一部分或者构建在语言中。

+0

'TakeWhile','dropwhile'链接和重复都包含在默认的F#库中。 –

回答

4

我不知道是否有包含同类产品,组合和排列功能的常用库,但你提到的其他人已经在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]) - >Seq.concat <| Seq.initInfinite (fun _ -> [1; 2; 3])

你也可能想看看优秀的FSharpx库 - 它包含许多有用的函数来处理集合和whatnot。