F#中序列的递归函数

时间:2012-07-12 12:20:40

标签: recursion f# sequence

相当琐碎的问题,但快速的谷歌搜索没有给我答案。

为序列编写递归函数的标准方法是什么?对于列表,您可以使用空列表和头+尾模式进行模式匹配,序列的等价物是什么?

2 个答案:

答案 0 :(得分:5)

由于很少编写序列的递归函数,因此没有标准的方法。

您应该查看Seq module中的各种高阶函数。它们通常绰绰有余,因此您不必自己编写递归函数。

要递归生成序列,序列表达式是一种简单直观的方法:

let rec allFiles dir =
    seq { yield! Directory.GetFiles dir
          for d in Directory.GetDirectories dir do
            yield! allFiles d }

如果你必须分解序列并以递归方式操作它,那么你做错了。您应该操纵ListLazyList from F# PowerPack,并将结果转换回序列。

答案 1 :(得分:1)

没有办法获得序列的尾部,因为它尚未被评估(理论上可能是无限的),所以你不能递归地将尾部传递给函数。您只需使用Seq.iter或产量!完成序列。