在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
创建一个函数。如何解释传递给该函数的[]
?
答案 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]
(通配符模式)会匹配所有可能的值。