在列表的最后一个元素上进行模式匹配

尼古拉斯·海宁

(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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

模式匹配以查找列表的最后一个元素

在列表的第一个元素上进行Foreach

Scala列表匹配最后一个元素

如何在列表和单个元素上进行模式匹配

需要在特定列上进行匹配的帮助模式,并更新使用awk找到的另一个匹配模式

GREP-文件中的模式匹配仅返回列表中的最后一个模式

使用最后一个元素扩展列表以匹配LINQ zip中的更长列表

删除列表的最后一个元素

获取列表的最后一个元素

更新列表的最后一个元素

使用grep -f,但它仅返回与列表中最后一个模式匹配的结果

是否可以使用XCTest中的最后一个匹配元素进行操作?

MySQL:如何仅在内部联接的最后一个元素匹配时进行选择?

OCaml函数返回其最后一个元素与谓词匹配的元组列表

删除最后一个匹配模式之间的行

模式在最后一个斜杠后匹配某些字符

如何将基于最后一个元素的元组列表与条件进行比较

Haskell - 按最后一个元组元素对元组列表进行排序

Python:如何将列表的最后一个元素与字符串的字符进行比较

获取包含元组的列表的索引,其中元组的第一个元素与模式匹配

如何创建一个模式来匹配元组列表中的所有元素?

模式匹配列表中第一个元素的数据类型

映射列表,最后一个列表元素除外

替换列表列表的最后一个元素

展开数组并返回最后一个元素匹配条件

golang slice [:]与最后一个元素匹配

最后一个可选元素上的akka路径匹配

数组匹配scala的最后一个元素

Python-如何按另一个列表列表的最后一个元素对列表列表进行排序?