警告:匹配非穷举-处理特定案例(SML)
考虑以下SML中的列表示例:警告:匹配非穷举-处理特定案例(SML),sml,Sml,考虑以下SML中的列表示例:[[(“foo”~10.0)],[(“goo”~8.0)] 我将链接编写一个函数,该函数将删除主括号,这意味着输出将是: [(“foo”~10.0),(“goo”~8.0)] 我写的函数是: fun inner_list [[]] = [] | inner_list [] = [] | inner_list ((((x:(string*real))::xt)::xs)) = x :: inner_list xs; 它适用于大多数情况,但我知道我没有检查其中一个情
[[(“foo”~10.0)],[(“goo”~8.0)]
我将链接编写一个函数,该函数将删除主括号,这意味着输出将是:
[(“foo”~10.0),(“goo”~8.0)]
我写的函数是:
fun inner_list [[]] = [] | inner_list [] = []
| inner_list ((((x:(string*real))::xt)::xs)) = x :: inner_list xs;
它适用于大多数情况,但我知道我没有检查其中一个情况。我认为这个情况是:
[[],(“foo”,~10.0)]
我知道我没有处理其中一个案例,因为编译器发出警报:
stdIn:1.6-2.68 Warning: match nonexhaustive
nil :: nil => ...
nil => ...
(x :: xt) :: xs => ...
我读了其他关于警告:match nonexhoustive
警告的文章,但我不知道如何用我的程序解决它
如何处理另一个案件
编辑我知道我的列表只包含一个列表。这就是为什么我不使用
xt
内置的列表如何。concat
List.concat [[("foo",~10.0)], [("goo",~8.0)]] =
[("foo",~10.0), ("goo",~8.0)]
为什么你不使用
xt
?@sepp2k,因为我知道列表中只有一个列表。我将编辑我的描述。你需要决定如何处理这种情况。如果你失败了,或者干脆忽略该元素,或者其他什么?[[],(“foo”,~10.0)]
不是有效的大小写,因为该表达式类型错误。@molbdnilo我希望它返回子列表而不包含nil
列表。[[],(“foo”,~10.0)]
将返回[(“foo”,~10.0)]