我该如何制作`fun [x] - > x`穷举?

时间:2013-08-31 17:02:32

标签: functional-programming pattern-matching ocaml

在Ocaml中说我有以下功能:

let f = fun [x] -> x

结果我得到以下警告:

this pattern-matching is not exhaustive.
Here is an example of a value that is not matched:
[]

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

2 个答案:

答案 0 :(得分:5)

当列表不是1个元素时,你必须决定你的函数应该做什么。 jambono展示了如何在所有这些情况下使函数失败。另一个相当合理的函数将始终返回列表的第一个元素,并且只有在列表为空时才会失败。此功能称为List.hd

let f = List.hd

或者您可以自己实施:

let f = function
| [] -> failwith "empty list"
| x :: _ -> x

答案 1 :(得分:1)

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

let f = function 
    |[x] -> x
    | _ -> failwith "bad entry";;
如果_不匹配,

[x](通配符模式)会匹配所有可能的值。