如何将列表展开到具有良品率的列表列表中?

时间:2014-04-04 01:10:41

标签: f#

另一个不切实际的练习......我有一个函数将列表展开为从每个列表元素开始的列表序列:

[ 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写同样的东西,但是失败了...这可能吗?还有其他很好的方法来编写这个函数吗?

1 个答案:

答案 0 :(得分:5)

let rec seqOfLists lst =
    seq {
        match lst with
        | _::xs -> 
            yield lst
            yield! seqOfLists xs
        | [] -> ()
    }
相关问题