fun p( x::xl ) =
if x::xl = [] then []
else [0];
收到警告:匹配非详尽。
x :: xl => ...
我想做的是:
p([])= []
当我这样做时,它会给出一个未被捕获的异常匹配[nonexhaustive match failure]
答案 0 :(得分:8)
你测试的内容x::xl = []
永远不会成真。列表是代数类型,定义为
datatype 'a list = :: of 'a * 'a list
| []
意味着作为列表的值是 空列表或某个元素放在另一个列表前面。
因此,一旦x::xl
的初始模式匹配成功,您就知道它不是空的。 (但这应该是相当清楚的,因为如果x
为空,它会分配给x::xl
;空列表的第一个元素是什么?)
你似乎在这里混合了两种风格,一种是模式匹配,另一种是 if-then-else 。
fun p [] = []
| p (_::_) = [0]
fun p xs = if List.null xs then [] else [0]