List 元组列表中的模式匹配与列表理解
我有一个这样的元组列表,我需要的是应用List 元组列表中的模式匹配与列表理解,list,haskell,pattern-matching,list-comprehension,List,Haskell,Pattern Matching,List Comprehension,我有一个这样的元组列表,我需要的是应用列表理解或模式匹配。。示例:使用“求和”或“过滤器”仅除以2个数字。。。我只想开始了解如何访问值和/或如何理解这个元组列表要总结as,请使用以下内容: type a = [(Int,Int,Int,Int)] fun:: a -> Int func [a,b,c,d] = ? f [] = .. f ((a,b,c,d):xs) = .. 类型A=[(Int,Int,Int,Int)] func::A->Int func tuples=sum[a
列表理解
或模式匹配
。。示例:使用“求和”或“过滤器”仅除以2个数字。。。我只想开始了解如何访问值和/或如何理解这个元组列表要总结a
s,请使用以下内容:
type a = [(Int,Int,Int,Int)]
fun:: a -> Int
func [a,b,c,d] = ?
f [] = ..
f ((a,b,c,d):xs) = ..
类型A=[(Int,Int,Int,Int)]
func::A->Int
func tuples=sum[a |(a,b,c,d)hammar的答案涵盖了列表理解,使用模式匹配的递归函数的基本模式是:
type A = [(Int, Int, Int, Int)]
func :: A -> Int
func tuples = sum [a | (a, b, c, d) <- tuples]
因此,您需要为不包含4元组的列表指定基本情况,以及当列表由4元组(a,b,c,d)
和4元组xs
的列表(可能为空,可能为非空)组成时的递归情况。第二行上的模式是嵌套模式:它首先根据类似的模式匹配列表(x:xs)
,即元素x
,后跟列表的其余部分xs
;然后它将x
与四元组结构匹配
下面,我将给出一些基本示例。请注意,您也可以使用标准的高阶函数编写此代码,例如过滤器
和映射
,我慎重地不提@
-模式和严格性。我不建议这样做,但这只是给您一个想法
当您要对元组的第一部分求和时,可以这样做:
type a = [(Int,Int,Int,Int)]
fun:: a -> Int
func [a,b,c,d] = ?
f [] = ..
f ((a,b,c,d):xs) = ..
如果要筛选出所有a
、b
、c
和d
均为偶数的元组:
sum4 :: [(Int,Int,Int,Int)] -> Int
sum4 [] = 0
sum4 ((a,b,c,d):xs) = a + sum4 xs
(如果使用all
使您感到困惑,只需阅读偶数a和偶数b和偶数c和偶数d
)
最后,这里有一个函数,它返回所有偶数元组组件(元组本身不可能是偶数!),顺序与它们在参数列表中出现的顺序相同:
filter4allEven :: [(Int,Int,Int,Int)] -> [(Int,Int,Int,Int)]
filter4allEven [] = []
filter4allEven ((a,b,c,d):xs)
| all even [a,b,c,d] = (a,b,c,d) : filter4AllEven xs
| otherwise = filter4AllEven xs
evenTupleComponents::[(Int,Int,Int,Int)]->[Int]
evenTupleComponents[]=[]
evenTupleComponents((a,b,c,d):xs)=[x | x你能举个例子说明你想完成什么吗?简单的例子,取a
之和,谢谢你怎么做?-->[x|x@Sudantha:要添加条件,请将其与“生成器”分开x谢谢,我没有得到的是如何将它应用到A
?正如上面你的回答:-)@Sudantha:你的意思是只对偶数A
s求和吗?sum[A |(A,b,c,d)抱歉,混淆了,这是返回数据类型。。非常感谢你解决了一个小问题:)