【问题标题】:Itertools for F#F# 的迭代工具
【发布时间】:2013-04-11 23:17:58
【问题描述】:

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

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

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

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

系统提示我提问,因为我看到了 this question on permutations in F#,并且很惊讶它不是库的一部分或内置于语言中。

【问题讨论】:

  • TakeWhiledropwhile 链接和重复都包含在默认的 F# 库中。

标签: f# itertools


【解决方案1】:

我不知道是否有一个常用的库包含产品,组合和排列等功能,但你提到的其他人已经在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 库——它包含许多有用的函数来处理集合和诸如此类的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 2015-10-08
    • 2014-10-18
    相关资源
    最近更新 更多