5

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

对我来说最重要的工具是:

  • product :笛卡尔积,相当于嵌套的for循环
  • 组合
  • 排列
  • 暂时
  • 丢弃时
  • chain :将多个迭代器链接在一起形成一个新的更长的迭代器
  • 重复* : 重复 (5) -> 5, 5, 5...
  • 计数*:计数(10)-> 10、11、12...
  • 循环*:循环([1,2,3])-> 1,2,3,1,2...

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

系统提示我提问,因为我在 F# 中看到了这个关于排列的问题,并且很惊讶它不是库的一部分或内置于语言中。

4

1 回答 1

5

不知道有没有一个常用的库,里面包含积、组合、排列等函数,但是你提到的其他的已经在SeqandList模块中或者可以轻松实现,而且.中也有有用的方法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 库——它包含许多有用的函数来处理集合和诸如此类的东西。

于 2013-04-12T00:27:39.313 回答