sml中的非穷举匹配

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的初始模式匹配成功,您就知道它不是空的。(不过,这应该相当清楚,因

它收到了一个警告:匹配非穷举

x::xl=>

我想做的是:

p([])=[]


当我这样做时,它会给出一个未捕获的异常匹配[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]