我需要在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;;
我错过了什么?我该如何解决?
答案 0 :(得分:1)
您想要一个'a list -> 'a list list
类型的函数。但是,匹配的第二个分支会返回'a list
类型的内容。
作为旁注,如果输入为空列表,则不应将其视为错误。对于这种情况,这是一个非常自然的答案。否则你在编写函数时会遇到很多麻烦。
答案 1 :(得分:1)
你离解决方案不远了。三件事:
[x] -> [[x]]
y
次?