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:_)
means.
谢谢。
:
是列表的构造函数,它将新列表的头作为其左参数,尾部作为其右参数。如果您将其用作像这里这样的模式,则意味着您匹配的列表的头部被赋予左侧模式,尾部被赋予右侧。
所以在这种情况下,列表的头部存储在变量中x
并且尾部没有被使用(_
意味着您不关心该值)。
是的,您还可以使用[]
与列表进行模式匹配,但仅限固定大小的列表。例如图案[x]
匹配仅包含一个元素的列表,然后将其存储在变量中x
。同样地[x,y]
将匹配具有两个元素的列表。
您建议的模式[x:y]
因此,会将列表与一个元素匹配,该元素与模式匹配x:y
。换句话说,它将匹配仅包含一个列表的列表列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)