gpt4 book ai didi

f# - 如何总结 seq 上的成员?

转载 作者:行者123 更新时间:2023-12-04 21:54:28 26 4
gpt4 key购买 nike

有人能帮我在这里漂浮吗? F# 还是新手,实际上是第一次尝试将它用于严肃的事情,但卡在了这个 noOb 问题上。

我有一个类型的 Assets

type Asset(line:string) = 
let fields = line.Split(',')
member this.EAD = Double.Parse(fields.[8])

然后我将一个 csv 文件公开为 seq :
'data' 这里是文件中行的 seq
let assets = Seq.map(fun line -> Asset(line)) data

现在我想获得这些 Assets 的总 EAD,但出现错误
'This value is not a function and cannot be applied'.

这是我尝试过的一些事情:
let totEAD = Seq.sum(a.EAD) assets // first try
let totEAD = Seq.sum(fun(a)->a.EAD) assets // pretty sure this is a function..

let getEad(a:Asset) = a.EAD // val getEad : Asset -> float ... is it a val of a function?
let x = Seq.sum(fun (a) -> getEad(a)) assets // nope...

提前致谢,

格特-简

更新:

这有效,但我仍然不明白为什么我不能一次性完成,有什么提示吗?
let x = Seq.map(fun (a:Asset) -> a.EAD) assets // first turn it into a seq<float>
let tot = Seq.sum(x)

最佳答案

您的问题是 Seq.sum 假设它能够处理整个类型并且不接受 lambda。它正在寻找要在您的类型上定义的 (+) 运算符。你想要做的是使用 sumBy,它接受一个 lambda。

此外,更喜欢流水线语法。如果您首先指定输入序列,那么聪明的类型推断系统可以在 sumBy lambda 中自动计算出您正在处理的类型,因此您不必添加类型注释:

let total =
assets
|> Seq.sumBy( fun a -> a.EAD )

关于f# - 如何总结 seq<type> 上的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4803275/

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