float -> float -> float)。我想对序列进行某种折叠以获得单个函数,该函数返回所有函数的总和。 例如,我可以将值 1.0、-6ren">
gpt4 book ai didi

f# - F# 中的 "summing"函数

转载 作者:行者123 更新时间:2023-12-01 04:35:11 25 4
gpt4 key购买 nike

我有一个 F# 函数列表,它们都是类型(float -> float -> float -> float)。我想对序列进行某种折叠以获得单个函数,该函数返回所有函数的总和。

例如,我可以将值 1.0、2.0 和 3.0 传递给列表中的每个函数,并从每个函数获取返回值。然后我可以计算所有这些值的总和。但是,我想概括一下。

我知道如何递归执行此操作,但我觉得它应该可以在一行中完成。有没有一种简洁的方法来完成这个任务?

最佳答案

@Lee 的解决方案是您正在寻找的单衬垫。如果您想保存几个字符,可以使用 List.sumBy,它首先将给定函数应用于列表的元素(类似于 List.map),然后对结果求和(就像 List.sum):

let sumAll (fs:(_ -> _ -> _ -> float) list) a b c = 
List.sumBy (fun f -> f a b c) fs

这个版本和 Lee 的版本都使用类型注释来指定列表中的函数返回 float。这是必需的,否则编译器不知道您要使用 List.sum( float 、整数等)求和的数字类型。需要解决这个歧义才能编译函数。

或者,您可以将函数标记为 inline,然后在您调用它时它会被内联(它适用于多种不同的数字类型)。您也可以将 fs 参数作为最后一个参数传递并使用部分函数应用程序:

let inline sumAll a b c = List.sumBy (fun f -> f a b c)

现在您可以使用流水线调用它,如下所示:fs |> sumAll 1 2 3

关于f# - F# 中的 "summing"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14345962/

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