OCaml列表匹配模式

时间:2016-02-20 03:13:55

标签: pattern-matching ocaml

所以我正在编写一个简单的方法,总结列表中前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

这涵盖了所有情况吗? 为什么我不能写出像[h1; h2; h3; _]这样的3个或更多元素呢? 对不起,如果这些问题看起来太简单了,我就开始学习OCaml,我无法在网上找到这样的东西。

1 个答案:

答案 0 :(得分:2)

  

这涵盖了所有情况吗?

是的,它们涵盖了所有案例,但我会写:

data/feeds

由于let sums l = match l with | [] -> 0 | [h1] -> h1 | [h1; h2] -> h1+h2 | h1 :: h2 :: h3 :: _ -> h1+h2+h3 [h1; h2; h3]匹配,h1 :: h2 :: h3 :: _是多余的(通配符为[]

  

对于3个或更多元素我怎么写不能写[h1; h2; h3; _]?

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