list - OCaml 模式匹配任意多个列表元素

标签 list pattern-matching ocaml

假设我有像 [1;2;3;4;5;6;9][1;2;3;9] 这样的列表,我想要编写一个模式来捕获以 1 开头并以 9 结尾的列表,并捕获列表中间的值。这可能与 OCaml 的模式匹配有关吗?

我试着写一些类似的东西

match l with
| 1::middle::9

match l with
| 1::middle::9::[]

但我不确定这些是否正在执行我想要的操作,并且可能只匹配 3 个元素列表。我可以采取一种方法来匹配这样的事情吗?我应该使用嵌套模式匹配吗?

最佳答案

没有与列表末尾匹配的模式,因此没有您想要的模式。您可以进行两场比赛:

match l with
| 1 :: _ -> (
    match List.rev l with
    | 9 :: _ -> true
    | _ -> false
)
| _ -> false

查找列表末尾是一个线性时间操作。如果您的列表可能很长,您可能需要使用不同的数据结构。

关于list - OCaml 模式匹配任意多个列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41706407/

相关文章:

C# - 对结构内的列表进行排序

python - 在不使用 for 循环的情况下从列表中访问类变量?

list - SwiftUI 列表行填充宽度

java - 找到最长的重复序列

css - 列表标签始终显示 0

scala - 在 Scala 中返回值本身用于默认模式匹配

haskell - 具有 `bool` 、 `either` 等功能的模式

javascript - js_of_ocaml 和 Deriving_Json

types - ReasonML 类型与相同类型不匹配

recursion - 在 OCaml 中折叠列表