list - 将列表应用于函数的参数

标签 list function f# functional-programming

如何在 F# 中编写函数以将值列表应用于函数,例如 Apply (@@) symbol in mathematica (将列表的元素映射到函数参数)

例如 apply f [1;2;3]电话f(1,2,3)或在 curry 函数应用程序中 f 1 2 3

最佳答案

你可以写一个类似 apply 的函数它接受任何 F# 函数和一个参数数组,并通过反射调用该函数。

但是,这不是在标准 F# 库中的一个很好的理由——F# 的优势之一(与 Mathematica 相比)是它是静态类型语言,可以在编译时捕获大多数潜在错误。如果你使用类似 apply 的东西那么你将失去这个检查[因为你永远不知道列表的长度是否正确]。

尽管如此,以下是如何执行此操作的示例:

open Microsoft.FSharp.Reflection

let apply (f:obj) (args:obj[]) =
  if FSharpType.IsFunction(f.GetType()) then
    let invoke =
      f.GetType().GetMethods()
      |> Seq.find (fun mi -> mi.Name = "Invoke" && mi.GetParameters().Length = args.Length)
    invoke.Invoke(f, args)
  else failwith "Not a function"

示例使用如下所示:
let add a b = a + b;;
apply add [| 3;4 |];;

关于list - 将列表应用于函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20274556/

相关文章:

python - 生成器到列表转换的不同速度

c - 打印链接列表(打印更多它应该打印的)

f# - 解决枚举上的不完整模式匹配

iphone - iPhone AppStore 和应用内购买的官方国家/地区列表?

list - 使用 scanLeft 打包符号

javascript - JavaScript 中的 "dot function"运算符

java - 如何确保函数在调用它的函数完成后运行?

javascript - 动态创建在共享服务器上不起作用

F#/.net 中的正则表达式/CTFG

visual-studio - 为什么我在 VS 2017 中没有 F# 语法颜色的设置?