如何在OCaml中实现以下模式匹配?

时间:2018-12-02 15:05:07

标签: ocaml

在给定列表上,我想设计一个模式匹配用例,它看起来像a::b::c
a应该被视为单个元素,而b应该被视为视为n个元素。 c是一种特定类型。此外,我想继续使用abc
因此,有什么方法可以设计像1element::nelement::type

这样构建的模式

1 个答案:

答案 0 :(得分:1)

不能。列表的模式匹配中没有“中间”元素。

以下模式:

| "lorem" :: "ipsum" :: rest -> ...

将匹配分别具有至少 2个匹配元素的字符串列表, "lorem""ipsum",并将rest绑定到列表的其余部分。

使用:

| "lorem" :: "ipsum" :: [] -> ...

您要匹配一个列表,该列表具有与"lorem"相匹配的 2个元素(仅) 和"ipsum"

如果要在最后一个元素上使用模式匹配,则可以使用

match List.rev list with
| last_element :: _ -> ...

但是您需要有充分的理由这样做,因为有更好/更快的方法 访问最后一个元素的方法。