添加列表内容列表以生成单个列表
Adding list of list contents to produce single list
我有这个
(map . map) (\x y -> x + y) [[1,4],[2,5],[3,6]]
我希望的输出是
[5,7,9]
但是,我得到了错误
* No instance for (Show (Integer -> Integer))
arising from a use of `print'
(maybe you haven't applied a function to enough arguments?)
* In a stmt of an interactive GHCi command: print it
不确定如何进行。我意识到我使用的组合 map
的类型是
(map . map) :: (a -> b) -> [[a]] -> [[b]]
我需要的是 (a -> b) -> [[a]] -> [b]
但我不确定我在哪儿。
您可以改用 map sum
。确实:
Prelude> <b>map sum</b> [[1,4], [2,5], [3,6]]
[5,7,9]
如果您使用 map . map
,这意味着您传递了一个函数 f
,这样:
(map . map) f [[x<sub>11</sub>, x<sub>12</sub>], [x<sub>21</sub>, x<sub>22</sub>], [x<sub>31</sub>, x<sub>32</sub>]]
将产生:
[[f x<sub>11</sub>, f x<sub>12</sub>], [f x<sub>21</sub>, f x<sub>22</sub>], [f x<sub>31</sub>, f x<sub>32</sub>]]
因此您映射列表列表中的每个元素。但是这里你想总结各个元素,所以你使用sum :: Num a => [a] -> [a]
作为映射函数。
我有这个
(map . map) (\x y -> x + y) [[1,4],[2,5],[3,6]]
我希望的输出是
[5,7,9]
但是,我得到了错误
* No instance for (Show (Integer -> Integer))
arising from a use of `print'
(maybe you haven't applied a function to enough arguments?)
* In a stmt of an interactive GHCi command: print it
不确定如何进行。我意识到我使用的组合 map
的类型是
(map . map) :: (a -> b) -> [[a]] -> [[b]]
我需要的是 (a -> b) -> [[a]] -> [b]
但我不确定我在哪儿。
您可以改用 map sum
。确实:
Prelude> <b>map sum</b> [[1,4], [2,5], [3,6]]
[5,7,9]
如果您使用 map . map
,这意味着您传递了一个函数 f
,这样:
(map . map) f [[x<sub>11</sub>, x<sub>12</sub>], [x<sub>21</sub>, x<sub>22</sub>], [x<sub>31</sub>, x<sub>32</sub>]]
将产生:
[[f x<sub>11</sub>, f x<sub>12</sub>], [f x<sub>21</sub>, f x<sub>22</sub>], [f x<sub>31</sub>, f x<sub>32</sub>]]
因此您映射列表列表中的每个元素。但是这里你想总结各个元素,所以你使用sum :: Num a => [a] -> [a]
作为映射函数。