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