【问题标题】:breaking a list into a new list of 2 neighboring elements将列表分解为 2 个相邻元素的新列表
【发布时间】:2014-02-09 02:13:32
【问题描述】:

我需要在 OCaml 中将 [1;2;3;4;5] 之类的列表拆分为 [[1;2]; [3;4]; [5]]

我编写了以下函数,但它给了我一个错误(错误:此表达式的类型为 'a 列表,但表达式应为 'a 类型。类型变量 'a 出现在 'a 列表中)

let rec getNewList l =
    match l with 
    [] -> failwith "empty list"
    | [x] -> [x]
    | x::(y::_ as t) -> [x;y] :: getNewList t;;

我错过了什么?我该如何解决?

【问题讨论】:

    标签: list ocaml


    【解决方案1】:

    您需要'a list -> 'a list list 类型的函数。但是,匹配的第二个分支返回 'a list 类型的内容。

    作为旁注,如果输入为空列表,则不应将其视为错误。对于这种情况,有一个非常自然的答案。否则你会在编写函数时遇到很多额外的麻烦。

    【讨论】:

      【解决方案2】:

      您离解决方案不远了。三件事:

      • 如果列表为空,您肯定希望结果为空列表
      • 第二种情况应该是[x] -> [[x]]
      • 对于主要情况,y 应在您的结果中出现多少次?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-17
        • 2019-08-19
        • 1970-01-01
        • 1970-01-01
        • 2020-03-22
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多