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 添加列表内容列表以生成单个列表_List_Haskell_Anonymous Function - Fatal编程技术网

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

List 添加列表内容列表以生成单个列表,list,haskell,anonymous-function,List,Haskell,Anonymous Function,我有这个 (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

我有这个

(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]
,但我不确定我在哪里。

你可以用
映射求和
。事实上:

Prelude> map sum [[1,4], [2,5], [3,6]]
[5,7,9]
将产生:

[[f x11, f x12], [f x21, f x22], [f x31, f x32]]
[[fx11,fx12],[fx21,fx22],[fx31,fx32]]

因此,您可以映射列表列表中的每个元素。但是在这里,您希望对各个元素求和,因此使用as-mapping函数。

您可以使用
map-sum
。事实上:

Prelude> map sum [[1,4], [2,5], [3,6]]
[5,7,9]
将产生:

[[f x11, f x12], [f x21, f x22], [f x31, f x32]]
[[fx11,fx12],[fx21,fx22],[fx31,fx32]]

因此,您可以映射列表列表中的每个元素。但是在这里,您想对单个元素进行汇总,因此使用映射函数。

使用二进制操作减少潜在长列表中的所有元素是
foldr
(或者
foldl'
,如果您的操作是严格的),而不是
map
(map)(\[x,y]>x+y)[[1,4],[2,5],[3,6]]会起作用。这就是我一直在寻找的,尽管我的lambda计算程序还不能掌握它。使用二进制操作减少潜在长列表中的所有元素是
foldr
(或者
foldl'
,如果操作严格的话),而不是
map
(map)(\[x,y]>x+y)[[1,4],[2,5],[3,6]]
会起作用。这就是我一直在寻找的,尽管我的lambda计算器还不能掌握它。是的,我知道
(map.map)
不会起作用。在匿名函数中是否无法复制
sum
?不重要,只是好奇。@147pm:
sum=foldr(+)0
,或者您可以使用lambda表达式
\x->sum x
,但我不明白您为什么需要传递匿名函数。是的,我知道
(map.map)
将无法工作。在匿名函数中是否无法复制
sum
?不重要,只是好奇。@147pm:
sum=foldr(+)0
,或者您可以使用lambda表达式
\x->sum x
,但我不明白您为什么需要传递匿名函数。