OCaml берет список для формирования списка с ограничениями - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь написать функцию, которая принимает список двоичных чисел и возвращает список списков следующим образом: он должен перебирать исходный список и может либо добавить вложенный список из 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 не станет пустым.

1 Ответ

0 голосов
/ 22 февраля 2020

У вас есть определение функции с именем aux, но нет вызова этой функции. Тело binList выглядит примерно так:

let rec aux acc binlist =
    (* Definition of aux *)

Вот и все. Нет in, связанного с этим let, и, следовательно, нет вызова aux.

...