另一个不切实际的练习......我有一个函数将列表展开为从每个列表元素开始的列表序列:
[ 1; 2; 3 ] |> Seq.unfold (fun lst ->
match lst with
| x::xs -> Some(lst, xs)
| [] -> None
)
产生
seq [[1; 2; 3]; [2; 3]; [3]]
我试着用seq / yield写同样的东西,但是失败了...这可能吗?还有其他很好的方法来编写这个函数吗?
答案 0 :(得分:5)
let rec seqOfLists lst =
seq {
match lst with
| _::xs ->
yield lst
yield! seqOfLists xs
| [] -> ()
}