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,我在网上找不到类似的东西。
这是否涵盖了所有情况?
是的,它们涵盖了所有情况,但我会写:
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;_] 的东西?
好吧,你就是不能。此语法无效。
编辑:抱歉我疯了。此语法是有效的,但它匹配四个元素的列表,而不绑定最后一个元素,这不是您想要的。