F #: Como faço para dividir uma seqüência em uma seqüência de seqüências

Fundo:

Eu tenho uma seqüência de dados contíguos, com registro de data e hora. A sequência de dados tem lacunas onde os dados não são contíguos. Eu quero criar um método para dividir a seqüência em uma seqüência de seqüências para que cada subsequência contenha dados contíguos (dividir a seqüência de entrada nas lacunas).

Restrições:

O valor de retorno deve ser uma sequência de sequências para garantir queos elementos são produzidos apenas conforme necessário (não é possível usar list / array / cacheing)A solução NÃO deve ser O (n ^ 2), provavelmente excluindo um padrão Seq.take - Seq.skip (cf.Brian's postar)Pontos de bônus para uma abordagem funcionalmente idiomática (desde que eu quero tornar-se mais proficiente em programação funcional), mas não é um requisito.

Assinatura do método

let groupContiguousDataPoints (timeBetweenContiguousDataPoints : TimeSpan) (dataPointsWithHoles : seq<DateTime * float>) : (seq<seq< DateTime * float >>)= ... 

Em face disso, o problema parecia trivial para mim, mas mesmo empregando Seq.pairwise, IEnumerator <_>, compreensões de seqüências e declarações de rendimento, a solução me escapa. Eu tenho certeza que isso é porque eu ainda não tenho experiência com a combinação de expressões F #, ou possivelmente porque existem algumas construções de linguagem que eu ainda não fui exposto.

// Test data
let numbers = {1.0..1000.0}
let baseTime = DateTime.Now
let contiguousTimeStamps = seq { for n in numbers ->baseTime.AddMinutes(n)}

let dataWithOccationalHoles = Seq.zip contiguousTimeStamps numbers |> Seq.filter (fun (dateTime, num) -> num % 77.0 <> 0.0) // Has a gap in the data every 77 items

let timeBetweenContiguousValues = (new TimeSpan(0,1,0))

dataWithOccationalHoles |> groupContiguousDataPoints timeBetweenContiguousValues |> Seq.iteri (fun i sequence -> printfn "Group %d has %d data-points: Head: %f" i (Seq.length sequence) (snd(Seq.hd sequence)))

questionAnswers(8)

yourAnswerToTheQuestion