添加列表内容列表以生成单个列表

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]作为映射函数。