gpt4 book ai didi

F# reduce 元组列表上的函数

转载 作者:行者123 更新时间:2023-12-04 19:32:15 24 4
gpt4 key购买 nike

这段简单的代码让我很困惑

这样就可以了

> let l = [1; 2; 3; 4];;
val l : int list = [1; 2; 3; 4]
> List.reduce(fun accm i -> accm + i) l;;
val it : int = 10

但这不是(即使逻辑完全一样)

> let l = [("a", 1); ("b", 2); ("c", 3); ("d", 4)];;                         
val l : (string * int) list = [("a", 1); ("b", 2); ("c", 3); ("d", 4)]

> List.reduce(fun accm tup -> accm + (snd tup)) l;;
List.reduce(fun accm tup -> accm + (snd tup)) l;;

>stdin(46,47): error FS0001: The type 'int' does not match the type 'string * int'

为什么会出现这个错误,因为代码很简单。遍历列表获取元组并将其与累加器的值一起传递给 reduce 函数。

在函数内部,从元组中取出第二个值并将其添加到累加器中。

我知道可能有很多其他方法可以获得我想要的东西......但我想知道为什么上面的代码不起作用?

最佳答案

您需要提供一个初始值。如果没有初始值,则 reduce 假定 List 中的第一个值是初始值,它是一个元组。因此你得到的错误。

关于F# reduce 元组列表上的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27576861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com