首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何才能使‘-> x’变得详尽无遗?

我如何才能使‘-> x’变得详尽无遗?
EN

Stack Overflow用户
提问于 2013-08-31 17:02:32
回答 2查看 139关注 0票数 2

在Ocaml中,我有以下功能:

代码语言:javascript
复制
let f = fun [x] -> x

因此,我收到以下警告:

代码语言:javascript
复制
this pattern-matching is not exhaustive.
Here is an example of a value that is not matched:
[]

我的目标是从'a list -> 'a创建一个函数。如何解释如何将[]传递给该函数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-31 17:36:35

当列表中有其他元素时,您只需决定您的函数应该做什么。jambono演示了如何使函数在所有这些情况下都失败。另一个相当合理的函数总是返回列表的第一个元素,只有当列表为空时才会失败。这个函数被称为List.hd

代码语言:javascript
复制
let f = List.hd

或者你也可以自己实现:

代码语言:javascript
复制
let f = function
| [] -> failwith "empty list"
| x :: _ -> x
票数 5
EN

Stack Overflow用户

发布于 2013-08-31 17:12:54

你必须涵盖所有可能的案件。除了[x]之外,还可以有一个空列表和一个包含多个元素的列表:

代码语言:javascript
复制
let f = function 
    |[x] -> x
    | _ -> failwith "bad entry";;

_是通配符模式,如果[x]不匹配,则匹配所有可能的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18550616

复制
相关文章

相似问题

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