Functional programming OCaml获取列表以形成具有约束的列表列表
我正在尝试编写一个函数,它接受一个二进制数列表并返回一个列表,如下所示:它必须在初始列表上迭代,并且可以添加一个n个1的嵌套列表,最多n-1个以零或单个零结尾的列表。例如(n=3时): 到目前为止,我掌握的代码是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
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 *)