Chapter3 - 匿名函数 - Anonymous Functions

 

F#提供了另外一个给我们去定义函数的方式,这就是使用关键字 fun

在接下来我们会给出例子。一般来说,在有些没有必要去定义一个局部使用,或者是不需要

名字的函数的时候你会用到这个特性。

比如当你的函数可能是会以参数的形式传递给另外一个函数,又或者该函数的作用小到不足以

费周折去定义它的时候。事实上,比如在使用List的时候我们就经常会用到它。

而事实上匿名函数也被称为lambda表达式(译者:我不知道这个说法正确不哈,但作者是这么说的。)

 

下面看代码:

 


let  x = ( fun  x y  ->  x + y)  1   2

// 便是使用了一个匿名函数,并且立刻执行了他

// 他相当于

let  f x y = x + y

let  x = f  1   2


结果为 : 3

 

同样,你也可以使用关键字function来定义一个函数,这跟使用fun的不同之处在于,

在使用function的时候,你可以使用模式匹配。(稍后章节会介绍)

下面我们来看稍微复杂一点的:

 


let  x1 = ( function  x  ->   function  y  ->  x + y )  1   2

let  x2 = ( function  (x,y)  ->  x + y) ( 1 , 2 )


 

上面的两种结果是一样的。

(译者:不过第一种方式的使用涉及到了另外一个概念,函数柯里化。我先稍微介绍一下吧。

就像我们中学的数学一样,我们定义了一个函数 z = x + y (1),然后我们通过某种方式

计算得出x = 2,这上面的公式(1)可以推演成

z = x + y (1)

z = 2 + y (2)

这个就是一个柯里化的过程。

对于第一种方式来说.事实上他可以看成是这样的,首先他是一个接受一个参数x的函数,

然后它接收了参数x,用x替换了函数体里的x,然后它又返回了另外一个接受一个参数y的函数

最后它才接受了y,返回了最终的值。大致步骤可分解为如下的过程:


   let  f1 = ( function  x  ->   function  y  ->  x + y)

   let  f2 = f1  1

   // 这时f2 = (function y -> 1 + y)

   let  f3 = f2  2

   // 在这个时候他才返回了最终的值3


 

事实上函数柯里化除了在学数学的时候有用,在其他很多地方都是有许多用处的,

不过还是以后我再写一些介绍吧,哈~跑题了。

   

转载于:https://www.cnblogs.com/SinSay/archive/2010/09/17/1828864.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值