1.函数式编程语言概述
最近几年,函数式编程语言异常火爆,而函数式编程语言有天然的优势,如数据的不可变性,无需锁机制即可在并发条件下执行,无副作用。它将函数作为普通数据类型一样,可以作为某个函数的参数,或者当作函数的返回值。另外,函数式编程语言最重要的基础是λ演算,即lambda calculus。λ演算是一个由λ项定义和变换规则组成的形式系统(Formal System),它通过λ项和对λ项的变换操作来表达计算。
函数式编程语言比较适合做数学公式推导,可以进行符号计算,比如求取某一个数学公式的导数或者积分,或者对公式进行化简操作等。函数式编程语言其实已经存在几十年了,只是非常长的时间内都活跃于学术界,而不是商业界。
常见的函数式编程语言有:
Lisp
Scheme
OCaml
Haskell
Julia
F#
F#是微软研发的,基于.NET平台的函数式编程语言,且已经开源,当前的最新版本为F#5.0 ,它随.NET 5 一起发布的。使用F#非常简单,只需要安装.NET SDK即可,或者可以安装Visual Studio或Visual Studio Code进行代码开发和调试。官网地址为: https://docs.microsoft.com/zh-cn/dotnet/fsharp
2.F#语言快速入门
在安装成功F#开发环境后,可以在命令行运行如下命令开启F#交互模式:
dotnet fsi
在此界面中,可以输入:
letstr="Hello World" ;;
其中的;;代码命令结束标志,它是交互模式下比较特殊的一点。此时回车后,F#交互模式给出执行结果,其中的str是一个string类型的变量,值为“Hello World”。下面给出简单的语法示例。
(*多行注释定义一个demo01模块*) moduledemo01//let 定义不可变对象leta=1+2//a <- 6 //mutable不可修改printfn"%d"aletxml="a = ""hello world"""printfn"%s"xmlleta1, b, c, d=3.14F, 4.14, 0.78M, 123I(*vala1 : float32valb : floatvalc : decimalvald : System.Numerics.BigInteger*) //函数letfx=2.0*xletgx=x**2.0letfg=f (g (3.0)) printfn"%f"fg//18.000000letf1x=2.0*xletg1fx=fxletfg2=g1f13.0printfn"%f"fg2//6.000000lettp1= ("Hello", 1) let (t1, t2) =tp1printfn"t1=%s,t2=%d"t1t2//t1=Hello,t2=1letxs= [ 1 .. 2 .. 9 ] //val xs : int list = [1; 3; 5; 7; 9]printfn"xs=%O"xsletlist1= [ "c"; "o" ] letlist2="a" :: list1//val list2 : string list = ["a"; "c"; "o"]letlist3=list1list2//val list3 : string list = ["c"; "o"; "a"; "c"; "o"]//val sum : list:int list -> int//rec 表示递归函数letrecsumlist=matchlistwith| [] ->0|x :: xs->x+sumxsprintfn"%d" (sum [ 1 .. 10 ]) //55[ 1 .. 11 ] |>sum|>printfn"%d"//66letsignx=matchxwith|0->0|xwhenx<0->-1|x->1letn=sign2printfn"%d"n//1