Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 元组列表中的模式匹配与列表理解_List_Haskell_Pattern Matching_List Comprehension - Fatal编程技术网

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)抱歉,混淆了,这是返回数据类型。。非常感谢你解决了一个小问题:)