将列表分成两个相邻元素的新列表

时间:2014-02-09 02:13:33

标签: list ocaml

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

我编写了以下函数,但它给了我一个错误(错误:这个表达式有一个类型'列表但是表达式需要类型'a类型变量'a出现在'列表中')

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

  • 如果列表为空,您肯定希望结果为空列表
  • 第二种情况应为[x] -> [[x]]
  • 对于主要案例,您的结果中应显示y次?