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