OCaml 列表匹配模式

Oxt*_*tis 6 ocaml pattern-matching

所以我正在编写一个简单的方法来总结列表中前 3 个或更少的整数,但我对匹配模式感到困惑。
我目前有

let sums l = match l with
    | [] -> 0
    | (h1::h2::h3::_) -> h1+h2+h3
    | [h1;h2;h3] -> h1+h2+h3
    | [h1;h2] -> h1+h2
    | [h1] -> h1
Run Code Online (Sandbox Code Playgroud)

这是否涵盖了所有情况?另外,为什么对于 3 个或更多元素我不能写类似 [h1;h2;h3;_] 的东西?
抱歉,如果这些问题看起来太简单,我刚刚开始学习 OCaml,我在网上找不到类似的东西。

obj*_*gic 5

这是否涵盖了所有情况?

是的,它们涵盖了所有情况,但我会写:

let sums l = match l with
  | [] -> 0
  | [h1] -> h1      
  | [h1; h2] -> h1+h2
  | h1 :: h2 :: h3 :: _ -> h1+h2+h3
Run Code Online (Sandbox Code Playgroud)

[h1; h2; h3]是多余的,因为h1 :: h2 :: h3 :: _匹配它(通配符是[]

另外,为什么对于 3 个或更多元素我不能写类似 [h1;h2;h3;_] 的东西?

好吧,你就是不能。此语法无效。
编辑:抱歉我疯了。此语法是有效的,但它匹配四个元素的列表,而不绑定最后一个元素,这不是您想要的。