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
List 如何在Haskell的列表中汇总列表中的值?_List_Haskell_Sum - Fatal编程技术网

List 如何在Haskell的列表中汇总列表中的值?

List 如何在Haskell的列表中汇总列表中的值?,list,haskell,sum,List,Haskell,Sum,当我试图学习Haskell只是为了好玩和体验时,我没有别的可能,只能问你一个完全初学者的“愚蠢”问题。 我偶然发现了一个问题,即如何找到列表中的列表之和,例如[1,3],[4,7],[2,5]]=[4,11,7],到目前为止,我还没有找到解决方案。有人知道这在Haskell中是如何工作的吗?您可以使用sum对列表求和,并且可以使用map对列表中的每个元素应用任何函数,因此您要寻找的函数是: map sum 应用该功能时: map sum [[1,3],[4,7],[2,5]] 你得到你的[4

当我试图学习Haskell只是为了好玩和体验时,我没有别的可能,只能问你一个完全初学者的“愚蠢”问题。
我偶然发现了一个问题,即如何找到列表中的列表之和,例如[1,3],[4,7],[2,5]]=[4,11,7],到目前为止,我还没有找到解决方案。有人知道这在Haskell中是如何工作的吗?

您可以使用
sum
对列表求和,并且可以使用
map
对列表中的每个元素应用任何函数,因此您要寻找的函数是:

map sum
应用该功能时:

map sum [[1,3],[4,7],[2,5]]

你得到你的
[4,11,7]
。发生的情况是map遍历外部列表,并将它作为第一个参数得到的函数(在本例中是
sum
函数)应用于每个元素。同时,
map
将结果收集到输出列表中。因此,
sum
应用于
[1,3]
,结果为
4
,应用于
[4,7]
,结果为
11
,应用于
[2,5]
,结果为
7
,所有这些都放在一个列表中
[4,11,7]

您可以使用
sum
对列表进行求和,并且可以使用
map
对列表的每个元素应用任何函数,因此您要查找的函数是:

map sum
应用该功能时:

map sum [[1,3],[4,7],[2,5]]

你得到你的
[4,11,7]
。发生的情况是map遍历外部列表,并将它作为第一个参数得到的函数(在本例中是
sum
函数)应用于每个元素。同时,
map
将结果收集到输出列表中。因此,
sum
应用于
[1,3]
,结果为
4
[4,7]
,结果为
11
[2,5]
,结果为
7
,所有这些都放在一个列表中
[4,11,7]
想想函数类型,它可能会有所帮助

您有
[[Int]]
,并且希望函数
[[Int]]->[Int]
获得
[Int]

您需要的函数是
map sum::[[Int]]->[Int]

以下代码在ghci中运行

首先,您有一个整数列表。请注意,在本例中,您需要使用
[[Int]]
引导
ghci
,以获得所需的类型,而不是令人困惑的泛型
[[1,3],[4,7],[2,5]::Num t=>[[t]

Prelude> let xs = [[1,3],[4,7],[2,5]] :: [[Int]]
Prelude> :t sumInts [1,3]
sumInts [1,3] :: Int
Prelude> sumInts [1,3]
4
接下来,您可能已经知道了
sum
,让我们为
[Int]
制作一个特定的,而不是通用的
sum::(可折叠的t,Num a)=>ta->a
,这将使类型更易于阅读

Prelude> let sumInts = sum :: [Int] -> Int
接下来,让我们在
xs=[[1,3]、[4,7]、[2,5]]

Prelude> let xs = [[1,3],[4,7],[2,5]] :: [[Int]]
Prelude> :t sumInts [1,3]
sumInts [1,3] :: Int
Prelude> sumInts [1,3]
4
现在,您可以对列表的一个元素执行
sum
,要对整个列表执行此操作,您可以使用
map

Prelude> :t map
map :: (a -> b) -> [a] -> [b]
让我们看看您是否将
sumInts
传递给一个映射,您将得到什么类型的映射

Prelude> :t map sumInts 
map sumInts :: [[Int]] -> [Int]
这应该适用于
xs::[[Int]]
,但是让我们先检查键入以确保

Prelude> :t map sumInts xs
map sumInts xs :: [Int]
现在进行计算

Prelude> map sumInts xs
[4,11,7]
由于
sumInts=sum
,这也意味着
sum
也可以工作

Prelude> :t map sum xs
map sum xs :: [Int]
Prelude> map sum xs
[4,11,7]

注1:
map sum
real type是
map sum::(可折叠的t,Num b)=>[tb]>[b]
)在上一个示例中,它是通过xs到
[[Int]]->[Int]
的类型
[[Int]]->[Int]
来推断的。想想函数类型,它可能会有所帮助

您有
[[Int]]
,并且希望函数
[[Int]]->[Int]
获得
[Int]

您需要的函数是
map sum::[[Int]]->[Int]

以下代码在ghci中运行

首先,您有一个整数列表。请注意,在本例中,您需要使用
[[Int]]
引导
ghci
,以获得所需的类型,而不是令人困惑的泛型
[[1,3],[4,7],[2,5]::Num t=>[[t]

Prelude> let xs = [[1,3],[4,7],[2,5]] :: [[Int]]
Prelude> :t sumInts [1,3]
sumInts [1,3] :: Int
Prelude> sumInts [1,3]
4
接下来,您可能已经知道了
sum
,让我们为
[Int]
制作一个特定的,而不是通用的
sum::(可折叠的t,Num a)=>ta->a
,这将使类型更易于阅读

Prelude> let sumInts = sum :: [Int] -> Int
接下来,让我们在
xs=[[1,3]、[4,7]、[2,5]]

Prelude> let xs = [[1,3],[4,7],[2,5]] :: [[Int]]
Prelude> :t sumInts [1,3]
sumInts [1,3] :: Int
Prelude> sumInts [1,3]
4
现在,您可以对列表的一个元素执行
sum
,要对整个列表执行此操作,您可以使用
map

Prelude> :t map
map :: (a -> b) -> [a] -> [b]
让我们看看您是否将
sumInts
传递给一个映射,您将得到什么类型的映射

Prelude> :t map sumInts 
map sumInts :: [[Int]] -> [Int]
这应该适用于
xs::[[Int]]
,但是让我们先检查键入以确保

Prelude> :t map sumInts xs
map sumInts xs :: [Int]
现在进行计算

Prelude> map sumInts xs
[4,11,7]
由于
sumInts=sum
,这也意味着
sum
也可以工作

Prelude> :t map sum xs
map sum xs :: [Int]
Prelude> map sum xs
[4,11,7]

注1:
map sum
real type是
map sum::(可折叠的t,Num b)=>[tb]>[b]
)在上一个例子中,它是由xs到
[[Int]]->[Int]
[Int]

的类型
[/Int]->[Int]
推断出来的。假设你知道如何对一个列表求和,看看
map:(a->[b]
,一点线索都没有,这听起来很难,怀疑有人做过这样的事。。。说真的,你到底试过什么?你有什么介绍吗?我总是建议,这是一个很好的开始。(无意冒犯——哈斯克尔一开始肯定会让人困惑,但有一点介绍性的材料,我相信你会相处融洽的。但要求像这样的小例子是无效的,对你来说不是,当然对StackOverflow也不是。)我已经习惯了像java这样的命令式语言,从我第一次通读Learnyoua haskell到现在只有一周了。。。我以前从未见过像这样使用map,因此感谢tipCheck out Haskell列表理解。假设您知道如何对一个列表求和,请查看
map::(a->b)->[a]->[b]
。毫无线索,这听起来很难,怀疑有人做过这样的事情。。。说真的,你到底试过什么?你有什么介绍吗?我一直都很害怕