Я пытаюсь написать функцию, которая принимает список двоичных чисел и возвращает список списков следующим образом: он должен перебирать исходный список и может либо добавить вложенный список из n единиц до n-1 единиц, оканчивающихся на ноль или один ноль. Например (с n = 3):
[1;1;1;1;0;0] -> [[1;1;1];[1;0];[0]]
[1;1;1] -> [[1;1;1]]
[1;0;0;1;1;0] -> [[1;0];[0];[1;1;0]]
Код, который у меня пока есть,
let bitListSequence binList n =
let rec aux acc binList =
match binList with
| [] -> acc
| x::xs ->
let rec loop acc2 = function
| 1 -> if List.length acc2 < n-1 then loop acc2::1 xs
else aux acc2 xs
| 0 -> aux acc2::0 xs in
aux [] acc
Я думаю, что logi c хорош, но синтаксис неверен. Я пытаюсь накапливать вложенный список в acc2
до тех пор, пока не будет выполнено условие, прежде чем добавить его к acc
и повторять процесс до тех пор, пока binList
не станет пустым.