5

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

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

4

2 回答 2

8

没有标准的方法可以这样做,因为您很少为序列编写递归函数。

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

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

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

如果你必须分解一个序列并递归地操作它,你就做错了。您应该从 F# PowerPack 操作ListLazyList,并将结果转换回序列。

于 2012-07-12T12:30:08.913 回答
0

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

于 2012-07-12T12:27:31.753 回答