Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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
Function 使用条件值筛选要输出列表的元组列表_Function_Haskell_Filter_Functional Programming_Tuples - Fatal编程技术网

Function 使用条件值筛选要输出列表的元组列表

Function 使用条件值筛选要输出列表的元组列表,function,haskell,filter,functional-programming,tuples,Function,Haskell,Filter,Functional Programming,Tuples,我想使用Haskell中的标准Prelude(无递归,无列表理解)来过滤元组列表,然后输出整数列表。它应该检查包含整数的3元组列表,例如 [(1,2,3), (2,3,7), (4,5,20)] 看看元素#1和#2之和是否等于元素#3。如果是,则将元素#3放入列表中,然后输出列表。这是我正在寻找的输出: >sumOfElements [(1,2,3), (2,3,7), (4,5,9)] [3,9] 这就是我尝试过的: sumsOfElements :: [(Int, Int, Int

我想使用Haskell中的标准Prelude(无递归,无列表理解)来过滤元组列表,然后输出整数列表。它应该检查包含整数的3元组列表,例如

[(1,2,3), (2,3,7), (4,5,20)]
看看元素#1和#2之和是否等于元素#3。如果是,则将元素#3放入列表中,然后输出列表。这是我正在寻找的输出:

>sumOfElements [(1,2,3), (2,3,7), (4,5,9)]
[3,9]
这就是我尝试过的:

sumsOfElements :: [(Int, Int, Int)] -> [Int]
sumsOfElements list = filter (\(a,b,c) -> a+b==c) list
这种方法可以工作,但它会输出满足条件的元组列表

>sumOfElements [(1,2,3), (2,3,7), (4,5,9)]
[(1,2,3), (4,5,9)]

我不知道如何从元组中提取
c
,并将该元素附加到新的输出列表中。

将此视为一个管道:首先找到正确的元素,然后将它们转换为所需的形状:

sumOfElements = map (\(_,_,c) -> c) . filter (\(a,b,c) -> a+b==c)

并且相信惰性和优化(特别是foldr/build fusion)将使其性能更好。

将其视为一个管道:首先找到正确的元素,然后将它们转换为您需要的形状:

sumOfElements = map (\(_,_,c) -> c) . filter (\(a,b,c) -> a+b==c)

并且相信惰性和优化(特别是foldr/build fusion)将使其性能更好。

您可以通过列表理解更简洁地做到这一点:

sumOfElements list = [c | (a,b,c) <- list, a+b==c]

sumofements list=[c |(a,b,c)通过列表理解,您可以更简洁地执行此操作:

sumOfElements list = [c | (a,b,c) <- list, a+b==c]

sumofements list=[c |(a,b,c)“我想使用标准前奏(不是递归或列表理解)”“我想使用标准前奏(不是递归或列表理解)”