【发布时间】:2016-10-06 16:33:41
【问题描述】:
fun p( x::xl ) =
if x::xl = [] then []
else [0];
收到警告:匹配非详尽。
x::xl => ...
我想做的是:
p( [] ) = []
当我这样做时,它会给出一个未捕获的异常 Match [nonexhaustive match failure]
【问题讨论】:
fun p( x::xl ) =
if x::xl = [] then []
else [0];
收到警告:匹配非详尽。
x::xl => ...
我想做的是:
p( [] ) = []
当我这样做时,它会给出一个未捕获的异常 Match [nonexhaustive match failure]
【问题讨论】:
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]
【讨论】: