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