F#的Itertools

Phi*_*l H 5 f# python-itertools

我习惯使用Python的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?你怎么让他们无限?

我被提示问,因为我在F#中看到了关于排列的这个问题,并且很惊讶它不是图书馆的一部分或内置于该语言中.

Mis*_*hor 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]) - > Seq.concat <| Seq.initInfinite (fun _ -> [1; 2; 3])

您还可以查看优秀的FSharpx库 - 它包含许多有用的函数来处理集合和诸如此类的东西.