head' :: [a] -> a
head' [] = error "No head for empty lists!"
head' (x:_) = x
head' :: [a] -> a
head' xs = case xs of [] -> error "No head for empty lists!"
(x:_) -> x
我要问一个我不明白的相当简单的问题。
在上面的代码中,我看到它需要一个输入列表。
但在第三行,它说
(x:_)
这让我很困惑。谁能向我解释他们为什么写
(x:_)
而不是 [x:_]
?另外,我不明白
(x:_)
方法。谢谢你。
最佳答案
:
是列表的构造函数,它将新列表的头部作为左参数,尾部作为右参数。如果您将其用作此处的模式,则意味着您匹配的列表的头部被赋予左侧模式,尾部赋予右侧。
所以在这种情况下,列表的头部存储在变量 x
中。并且不使用尾部(_
表示您不关心该值)。
是的,您也可以使用 []
对列表进行模式匹配,但仅限于固定大小的列表。例如模式 [x]
匹配只有一个元素的列表,然后将其存储在变量 x
中.同样[x,y]
将匹配具有两个元素的列表。
您建议的模式[x:y]
因此将匹配具有一个元素的列表,该元素匹配模式 x:y
.换句话说,它将匹配一个包含一个列表的列表列表。
关于list - 什么是(x :_) and [x:_] mean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4482697/