Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 用于F的Itertools#_F#_Itertools - Fatal编程技术网

F# 用于F的Itertools#

F# 用于F的Itertools#,f#,itertools,F#,Itertools,我习惯于用迭代器(F#:序列)做函数式的事情,我想知道F#或常用的库中是否有等价物,因为它们非常方便 我最喜欢的工具是: 积:笛卡尔积,相当于嵌套for循环 组合 排列 花时间 中途 链:将多个迭代器链在一起,形成一个新的更长的迭代器 重复*:重复(5)->5,5,5 计数*:计数(10)->10,11,12 循环*:循环([1,2,3])->1,2,3,1,2 *我想这3个会产生F#中的单子?你如何使它们无限 我被提示询问,因为我看到它不是库的一部分,也不是内置在语言中的,我很惊讶。我不知

我习惯于用迭代器(F#:序列)做函数式的事情,我想知道F#或常用的库中是否有等价物,因为它们非常方便

我最喜欢的工具是:

  • 积:笛卡尔积,相当于嵌套for循环
  • 组合
  • 排列
  • 花时间
  • 中途
  • 链:将多个迭代器链在一起,形成一个新的更长的迭代器
  • 重复*:重复(5)->5,5,5
  • 计数*:计数(10)->10,11,12
  • 循环*:循环([1,2,3])->1,2,3,1,2
*我想这3个会产生F#中的单子?你如何使它们无限


我被提示询问,因为我看到它不是库的一部分,也不是内置在语言中的,我很惊讶。

我不知道是否有一个常用的库包含产品、组合和置换等功能,但是您提到的其他方法已经在
Seq
List
模块中,或者可以轻松实现,并且
System.Linq.Enumerable
中也有一些有用的方法

  • takewhile
    ->
    Seq.takewhile
  • dropwhile
    ->
    Seq.skipWhile
  • chain
    ->
    Seq.concat
  • 重复
    ->
    Seq.initInfinite
  • count(10)
    ->
    Seq.initInfinite(+)10)
  • 循环([1,2,3])
    ->
    Seq.concat[1;2;3])

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

TakeWhile
dropwhile
链接和重复都包含在默认的F#libs中。