List 如何在Haskell的列表中汇总列表中的值?
当我试图学习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
我偶然发现了一个问题,即如何找到列表中的列表之和,例如[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]
。毫无线索,这听起来很难,怀疑有人做过这样的事情。。。说真的,你到底试过什么?你有什么介绍吗?我一直都很害怕