相当琐碎的问题,但快速的谷歌搜索并没有给我答案。
为序列编写递归函数的标准方法是什么?对于列表,您将使用空列表和头+尾模式进行模式匹配,序列的等价物是什么?
没有标准的方法可以这样做,因为您很少为序列编写递归函数。
您应该查看Seq 模块中的各种高阶函数。它们通常绰绰有余,因此您不必自己编写递归函数。
要递归地生成序列,序列表达式是一种简单直观的方法:
let rec allFiles dir =
seq { yield! Directory.GetFiles dir
for d in Directory.GetDirectories dir do
yield! allFiles d }
如果你必须分解一个序列并递归地操作它,你就做错了。您应该从 F# PowerPack 操作List
或LazyList,并将结果转换回序列。
没有办法得到序列的尾部,因为它没有被评估(理论上可能是无限的),所以你不能递归地将尾部传递给函数。您只需使用 Seq.iter 或 yield!通过序列。