Модуль Seq имеет оконную функцию, но это дает вам скользящее окно, поэтому этот вопрос не годится.
Вот моя версия, я не тестировал сравнение производительности с другими ответами, но она красивее (я думаю!)
//Add an "extension function" to the Seq module
module Seq =
let rec chunks n (s:#seq<_>) =
seq {
if Seq.length s <= n then
yield s
else
yield Seq.take n s
yield! chunks n (Seq.skip n s)
}
//Make curried version of String.Join
let join sep (s:#seq<string>) = System.String.Join(sep, Array.of_seq s)
//Compose the bits together
let mailMerge n = Seq.chunks n >> Seq.map (join ";")
//Test
mailList |> mailMerge 25
Возможно, вы также можете посмотреть Массив срезов .