在F#中,函数的工作方式类似于数据类型,您可以像其他任何变量一样声明和使用函数。
通过使用 let 关键字定义功能,函数定义具有以下语法-
let [inline] function-name parameter-list [ : return-type ] =function-body
您可以在函数名称之后列出参数的名称,您可以指定参数的类型,参数的类型应遵循用冒号分隔的参数名称。
如果未指定任何参数类型,则由编译器推断出来。
let doubleIt (x : int)=2 * x
通过指定函数名称,后跟一个空格,然后使用空格分隔所有参数,来调用一个函数。
let vol=cylinderVolume 3.0 5.0
以下程序说明了这些概念。
以下程序在给出半径和长度作为参数时计算圆柱体的体积
//这是单行注释 //以半径和长度为参数的圆柱体 let cylinderVolume radius length : float = //function body let pi = 3.14159 length * pi * radius * radius let vol = cylinderVolume 3.0 5.0 printfn " Volume: %g " vol
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-functions.html
来源:LearnFk无涯教程网
Volume: 141.372
以下程序返回两个给定参数的较大值-
//该函数返回两个之间较大的值 //arguments let max num1 num2 : int32 = //function body if(num1>num2)then num1 else num2 let res = max 39 52 printfn " Max Value: %d " res
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-functions.html
来源:LearnFk无涯教程网
Max Value: 52
let doubleIt (x : int) = 2 * x printfn "Double 19: %d" ( doubleIt(19))
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-functions.html
来源:LearnFk无涯教程网
Double 19: 38
您可以使用 let rec 关键字组合定义一个递归。
定义递归函数的语法是-
//递归函数定义 let rec function-name parameter-list=recursive-function-body
如-
let rec fib n=if n < 2 then 1 else fib (n - 1) + fib (n - 2)
以下程序将斐波那契1返回10-
let rec fib n = if n < 2 then 1 else fib (n - 1) + fib (n - 2) for i = 1 to 10 do printfn "Fibonacci %d: %d" i (fib i)
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-functions.html
来源:LearnFk无涯教程网
Fibonacci 1: 1 Fibonacci 2: 2 Fibonacci 3: 3 Fibonacci 4: 5 Fibonacci 5: 8 Fibonacci 6: 13 Fibonacci 7: 21 Fibonacci 8: 34 Fibonacci 9: 55 Fibonacci 10: 89
以下程序返回阶乘8-
open System let rec fact x = if x < 1 then 1 else x * fact (x - 1) Console.WriteLine(fact 8)
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-functions.html
来源:LearnFk无涯教程网
40320
F#使用链接的箭头符号报告有关函数和值中的数据类型的信息,以一个接受一个 int 输入并返回一个字符串的函数为示例。
int -> string
从左到右读取数据类型。
让无涯教程采用另一个假设函数,该函数接受两个int数据输入并返回一个字符串。
let mydivfunction x y=(x/y).ToString();;
F#使用链接的箭头符号将数据类型报告为-
val mydivfunction : x:int -> y:int -> string
返回类型由最右边的数据类型以链接箭头表示。
一些更多的示例-
符号 | 含义 |
---|---|
float→float→float | 该函数接受两个 float 输入,返回另一个 float 。 |
int→strig→float | 该函数接受一个 int 和一个 string 输入,返回一个 float 。 |
以两个功能为示例-
let applyFunction ( f: int -> int -> int) x y = f x y let mul x y = x * y let res = applyFunction mul 5 7 printfn "%d" res
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-functions.html
来源:LearnFk无涯教程网
35
现在在上面的示例中,如果不用定义函数 mul ,无涯教程可以将lambda表达式用作-
let applyFunction ( f: int -> int -> int) x y = f x y let res = applyFunction (fun x y -> x * y ) 5 7 printfn "%d" res
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-functions.html
来源:LearnFk无涯教程网
35
以下示例显示了由两个函数function1和function2组成的名为f的函数-
let function1 x = x + 1 let function2 x = x * 5 let f = function1 >> function2 let res = f 10 printfn "%d" res
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-functions.html
来源:LearnFk无涯教程网
55
以下示例显示-
let function1 x = x + 1 let function2 x = x * 5 let res = 10 |> function1 |> function2 printfn "%d" res
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-functions.html
来源:LearnFk无涯教程网
55
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)