如何解决如何改进匹配模式以提取Ocaml中列表的第二项
我有一个包含两个项目的列表,例如para1.para2.
。我尝试通过此代码提取第二项。
[1;2]
编译器发出警告let _::b::_ = [1;2] in b
尽管这很明智,但我想知道我们如何做得更好。可能没有警告吗?
解决方法
这是OCaml详尽检查模式的缺点。在几乎所有情况下,它都是非常有用的,但是在某些情况下,您想使用一种不详尽的模式。也就是说,在您知道可能的值在某种程度上受到限制的情况下。
如果您绝对肯定您的列表中至少包含2个元素,则可以使用List.nth
:
# List.nth [1; 2] 1;;
- : int = 2
但是,这仅适用于从列表中提取一个值,而不是一般情况。
您可以关闭穷举性警告:
# let [@warning "-8"] _ :: b :: _ = [1; 2] in b;;
- : int = 2
您可以编写一个详尽的模式,这是我通常自己做的事情:
# match [1; 2] with
| _ :: b :: _ -> b
| _ -> assert false ;;
- : int = 2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。