(x:xs)
如本例所示,我们在第一个元素上使用模式匹配:
head' :: [a] -> a
head' xs = case xs of [] -> error "No head for empty lists!"
(x:_) -> x
有没有办法在最后一个元素上进行图案匹配?
如果您拥有GHC 6.10或更高版本,请使用视图模式。
视图模式允许在模式内部调用view函数并与结果匹配:
size (view -> Unit) = 1 size (view -> Arrow t1 t2) = size t1 + size t2
也就是说,我们添加了一种新的模式形式,
expression -> pattern
这意味着“将表达式应用于我们要匹配的任何对象,然后将该应用程序的结果与模式匹配”。该表达式可以是任何函数类型的Haskell表达式,并且无论当前使用哪种模式,都可以使用视图模式。
定义head'
为
{-# LANGUAGE ViewPatterns #-}
head' :: [a] -> a
head' (last -> l) = l
它按您的预期工作。
λ> head' [3,5,7]
7
λ> head' []
*** Exception: Prelude.last: empty list
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句