Как развернуть список в список списков с доходностью?

Еще одно непрактичное упражнение... У меня есть функция, которая разворачивает список в последовательность списков, начиная с каждого элемента списка:

[ 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 ответ

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

licensed under cc by-sa 3.0 with attribution.