F#中的传递函数

时间:2020-03-05 18:47:41  来源:igfitidea点击:

是否可以将对一个函数的引用传递给F#中的另一个函数?具体来说,我想传递lambda函数,例如

foo(有趣x-> x ** 3)

更具体地说,我需要知道如何在自己编写的函数中引用传递的函数。

解决方案

回答

对的,这是可能的。该手册包含以下示例:

> List.map (fun x -> x % 2 = 0) [1 .. 5];;

val it : bool list
= [false; true; false; true; false]

回答

函数是F#中的一等公民。因此,我们可以随心所欲地传递它们。

如果我们具有这样的功能:

let myFunction f =
    f 1 2 3

并且f是函数,则myFunction的返回值将f应用于1,2和3.

回答

将lambda函数传递给另一个函数的工作方式如下:

假设我们自己有一个琐碎的功能,如下所示:

let functionThatTakesaFunctionAndAList f l = List.map f l

现在,我们可以向其传递一个lambda函数和一个列表:

functionThatTakesaFunctionAndAList (fun x -> x ** 3.0) [1.0;2.0;3.0]

在我们自己的函数functionThatTakesaFunctionAndAList中,我们可以将lambda函数称为f,因为我们调用了第一个参数f。

函数调用的结果当然是:

float list = [1.0; 8.0; 27.0]