List 对嵌套列表f上的项求和#

List 对嵌套列表f上的项求和#,list,recursion,f#,functional-programming,List,Recursion,F#,Functional Programming,我想分别对列表列表的第n个元素求和。i、 e [[3;2;1]; [4;3;5]] should sum to [7;5;6] 所有嵌套列表的长度相同,但该长度未知。在本例中为3,但可以是4、5或6。我知道如何按程序进行,但我需要一个F#中的函数解决方案。谢谢计算总和的一种方法是: let sum = List.reduce (List.map2 (+)) vs reduce函数使用reducer函数按顺序组合元素。例如: List.reduce (+) [1;2;4] 这里reduce使

我想分别对列表列表的第n个元素求和。i、 e

[[3;2;1]; [4;3;5]] should sum to [7;5;6]

所有嵌套列表的长度相同,但该长度未知。在本例中为3,但可以是4、5或6。我知道如何按程序进行,但我需要一个F#中的函数解决方案。谢谢

计算总和的一种方法是:

let sum = List.reduce (List.map2 (+)) vs
reduce
函数使用reducer函数按顺序组合元素。例如:

List.reduce (+) [1;2;4]
这里
reduce
使用
+
组合
1
2
,从而得到
3
。然后将
3
4
组合,得到结果
4

在OP示例中,我们也希望减少一个列表,但输入列表中的元素本身就是列表,所以reducer函数必须稍微复杂一些

给定的减速器功能
[3;2;1]
[4;3;5]
应产生
[7;5;6]
。这是分段加法。一种方法是使用
List.map2
。通常
map
使用映射器函数映射列表中的所有值
map2
允许我们同时迭代两个输入,并将两个值映射为一个值

List.map2 (+) [3;2;1] [4;3;5]
因此产生:
[7;5;6]

上述函数对
int list
的reducer函数具有正确的签名,因此答案是:

let sum = List.reduce (List.map2 (+)) vs

首先,我将假设列表列表中实际上不包含元组。所以这个问题应该这样表述:
[[3;2;1];[4;3;5]]的总和应为[7;5;6]
。如果你能展示一个程序性的解决方案,那就太好了,因为它通常很容易转化为一个例子。但请参见以下两种方法:

let xs = [[3;2;1]; [4;3;5]]

(xs.[0],xs.[1]) ||> List.map2 (+) // val it : int list = [7; 5; 6]

xs 
|> List.transpose
|> List.map List.sum //val it : int list = [7; 5; 6]

在列表列表中,是否有元组?还是一份清单?我想你的意思是:
[[3;2;1];[4;3;5]]的总和应该是[7;5;6]
。注意分号。你写的东西有类型
(int*int*int)list
,但你可能想要
int-int-list
。是的,现在正确了吗?对不起,我是新来的,是的。F#使用
以分隔数组和列表元素。你应该看一些介绍系列,是的,我已经看过了。你知道解决这个问题的方法吗,我需要把它转换成矩阵并求和吗?你已经有了两个答案:-)你可以使用
List.transpose
或者你可以
List.reduce
。我把列表理解类型的解决方案留给你们了。我可能是指命令式解决方案,如c#list.transpose in F#?嗯,你们可以显示c#代码,它可以翻译。是的,
列表。transpose
位于
F#
中,它是最近添加的。谢谢!从一场可怕的悲剧中拯救了我的任务:)