Разделение списка на список списков на основе предиката

(Я в курсеэтот вопрос, но это касается последовательностей, что не моя проблема здесь)

Учитывая этот вход (например):

let testlist = 
    [  
       "*text1";
       "*text2";
       "text3";
       "text4";
       "*text5";
       "*text6";
       "*text7"
    ]

let pred (s:string) = s.StartsWith("*")

Я хотел бы иметь возможность позвонитьMyFunc pred testlist и получить этот вывод:

[
    ["*text1";"*text2"];
    ["*text5";"*text6";"*text7"]
]

Это мое текущее решение, но мне не очень нравятся вложенные List.revs (игнорируйте тот факт, что он принимает Seq в качестве входных данных)

let shunt pred sq =
    let shunter (prevpick, acc) (pick, a) = 
        match pick, prevpick with
        | (true, true)  -> (true, (a :: (List.hd acc)) :: (List.tl acc))
        | (false, _)    -> (false, acc)
        | (true, _)     -> (true, [a] :: acc)

    sq 
        |> Seq.map (fun a -> (pred a, a))
        |> Seq.fold shunter (false, []) 
        |> snd
        |> List.map List.rev
        |> List.rev

Ответы на вопрос(5)

Ваш ответ на вопрос