你测试什么x::xl = [],永远不会是真的.列表是代数类型,定义为
datatype 'a list = :: of 'a * 'a list
| []
Run Code Online (Sandbox Code Playgroud)
意一个值,该值是一个列表是任一空列表或一些元件放在另一个列表的前面.
因此,一旦您的初始模式匹配x::xl成功,您就知道它不是空的.(这应该是相当明显的,虽然,因为那会分配到x,如果x::xl是空的,空列表的第一个元素?)
你似乎在这里混合了两种风格,一种是模式匹配,另一种是if-then-else.
fun p [] = []
| p (_::_) = [0]
fun p xs = if List.null xs then [] else [0]
Run Code Online (Sandbox Code Playgroud)