【问题标题】:OCaml taking a list to form a list of list with constraintsOCaml 采用一个列表来形成一个带有约束的列表列表
【发布时间】:2020-06-06 08:45:03
【问题描述】:

我正在尝试编写一个函数,它接受一个二进制数列表并返回一个列表列表,如下所示:它必须遍历初始列表,并且可以添加 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

我认为逻辑很好,但语法不正确。我正在尝试将嵌套列表累积到 acc2 中,直到满足条件,然后将其附加到 acc 并重复该过程直到 binList 为空。

【问题讨论】:

    标签: functional-programming ocaml nested-loops


    【解决方案1】:

    您定义了一个名为aux 的函数,但没有调用该函数。 binList 的正文大致是这样的:

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

    就是这样。没有与此 let 关联的 in,因此没有调用 aux

    【讨论】:

    • 是否有可能通过同时运行 2 个累加器来完成我想要做的事情?
    • 这个问题很难回答。在我看来,您可以拥有一个累加器,它是一个列表列表和最近列表中 1 的计数。最后,您可以反转所有列表和外部列表。这可能就是我开始的方式。如果你把计数称为累加器,那就是两个累加器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2021-06-17
    • 1970-01-01
    • 2010-10-11
    • 2015-03-02
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多