假设我有像 [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/