首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何改进匹配模式提取Ocaml中的第二项列表

如何改进匹配模式提取Ocaml中的第二项列表
EN

Stack Overflow用户
提问于 2020-10-26 00:42:20
回答 1查看 47关注 0票数 0

[1;2]说,我有一个有两个项目的列表。我试着用这个代码提取第二项。

代码语言:javascript
复制
let _::b::_ = [1;2] in b

编译器给出警告Warning 8: this pattern-matching is not exhaustive. Here is an example of a case that is not matched: (_::[]|[])

虽然这是明智的,但我更想知道我们如何才能做得更好。可能没有预兆吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-26 01:48:53

这是OCaml彻底检查模式的缺点。在几乎所有的情况下,它都是非常有用的,但在一些情况下,您希望使用一种并非详尽无遗的模式。也就是说,如果你知道可能的价值在某种程度上是有限的。

如果你绝对肯定你的列表至少有2个元素,你可以使用List.nth

代码语言:javascript
复制
# List.nth [1; 2] 1;;
- : int = 2

但是,这只适用于从列表中提取一个值,而不是一般情况下。

您可以关闭耗尽性警告:

代码语言:javascript
复制
# let [@warning "-8"] _ :: b :: _ = [1; 2] in b;;
- : int = 2

您可以编写一个详尽的模式,这就是我自己通常所做的:

代码语言:javascript
复制
# match [1; 2] with
  | _ :: b :: _ -> b
  | _ -> assert false ;;
- : int = 2
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64530243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档