Functional programming OCaml获取列表以形成具有约束的列表列表

Functional programming OCaml获取列表以形成具有约束的列表列表,functional-programming,ocaml,nested-loops,Functional Programming,Ocaml,Nested Loops,我正在尝试编写一个函数,它接受一个二进制数列表并返回一个列表,如下所示:它必须在初始列表上迭代,并且可以添加一个n个1的嵌套列表,最多n-1个以零或单个零结尾的列表。例如(n=3时): 到目前为止,我掌握的代码是 let bitListSequence binList n = let rec aux acc binList = match binList with | [] -> acc | x::xs -> let rec loop acc2 = fu

我正在尝试编写一个函数,它接受一个二进制数列表并返回一个列表,如下所示:它必须在初始列表上迭代,并且可以添加一个n个1的嵌套列表,最多n-1个以零或单个零结尾的列表。例如(n=3时):

到目前为止,我掌握的代码是

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
让bitListSequence binList n=
让rec aux acc binList=
将binList与
|[]->acc
|x::xs->
让rec循环acc2=函数
|1->如果List.length acc2aux acc2::0 xs in
辅助[]附件

我认为逻辑是好的,但语法是不正确的。我试图将嵌套列表累加到
acc2
中,直到满足一个条件,然后再将其附加到
acc
,并重复此过程,直到
binList
为空。

您有一个名为
aux
的函数定义,但没有对该函数的调用。
binList
的主体大致如下所示:

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

就这样。
中没有与此
let
相关的
,因此没有调用
aux

在两个蓄能器同时运行的情况下,是否可以完成我试图完成的任务?很难回答这个问题。在我看来,你可以有一个累加器,它是一个列表列表和最近列表中1个数的计数。最后,您可以反转所有列表和外部列表。我可能就是这样开始的。如果你把计数称为累加器,那就是两个累加器。
let rec aux acc binlist =
    (* Definition of aux *)