在Java中的函数

一.什么是函数

成为函数必须要满足一个条件:定义域内所有元素都必须在陪域内有且仅有一个对应元素。

1.1 逆函数(Inverse function)

  • 一个函数未必会有逆函数
  • 若函数f是一明确的逆函数,必须为双射函数
    1.单射:陪域中每一元素只被f映射一次
    2.满射:陪域中每一个元素都被f映射到

例如: f ( x ) = 2 x f(x)=2x f(x)=2x这个函数就没有逆函数,因为不是满射函数

1.2偏函数(Partial function)

定义:没有在定义域中定义所有元素但是满足其他需求(定义域里不存在任何在陪域里有多个元素与之相对应的元素)的关系一般称为偏函数

现在我们看一个函数: y = x 2 y = \frac{x}{2} y=2x

如果我们假设这个函数的定义域和陪域都是N(包含0的正整数集)呢?
如果当x为奇数,比如, 3 2 \frac{3}{2} 23 不是一个整数, 不在陪域N内,所以这个函数没有在定义域中定义所有元素,他是一个偏函数

1.3复合函数(Compound function)

如果两个函数复合,f和g复合可标记为f。g(圆圈在中间不是在左下角),如果f(x)=x+2并且g(x)=x2,可得f。g=f(g(x))=f(x2)=(x*2)+2

注意⚠️:f。g与g。f 结果不同!

1.4多参函数(multi-parameter function)

f(x,y)=x+y就是一个多参函数,(x,y)是一个元组,比如(3,5),(2,4)……
f(3,5)=3+5;f(2,4)=2+4;

1.5函数柯里化(currying)

柯里化:是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

我们可以认为f(3,5)是一个从N到N的函数集的函数,所以f(x,y)=x+y就可以写成:
f ( x ) ( y ) = g ( y ) f(x)(y)=g(y) f(x)(y)=g(y)其中 g ( y ) = x + y g(y)=x+y g(y)=x+y在这种情况下,可以这样写 f ( x ) = g f(x)=g f(x)=g他的意思是将函数f应用于参数x,结果是一个新的函数g。将函数g应用于y会得到: g ( y ) = x + y g(y)=x+y g(y)=x+y如果将其应用到(3,5),就会得到:
f ( 3 ) ( 5 ) = g ( 5 ) = 3 + 5 = 8 f(3)(5)=g(5)=3+5=8 f(3)(5)=g(5)=3+5=8

1.6偏应用函数

当一个函数有很多参数时,调用者就需要提供多个参数。如果减少参数个数,就可以简化调用者的负担。

  • 比如我有一个函数计算两个数的乘积其中b是固定的数5,multi(a,b),需要传入两个参数才能计算。比如multi(2,5);multi(5,5);multi(6,5);假如我们需要传入10000组数进行计算,每次传入两个数不如‘让5为固定数,只传入a’这种方法更方便。

偏函数 vs 部分应用函数

(引用自 http://songkun.me/2018/05/16/scala-partialfunction-partially-applied-function-currying/)

虽然偏函数(partial function)、部分应用函数(partially applied
function)的英文名字非常接近,但它们却是风马牛不相及的两个概念:

偏函数是仅能处理入参类型 子集 的函数,是数学概念; 部分应用函数是函数调用的结果,只不过该函数调用只提供了 部分参数;

部分应用函数 vs 柯里化

与前面一组不同,该两者并非由于名字接近而容易被混淆,部分应用函数和柯里化都可以用于 减少函数参数,但两者依然存在明显区别:

部分应用函数:应用已提供的参数,返回 一个 新函数,该函数接受剩余参数为参数; 柯里化:分解函数,将多参函数分解为 一系列 的单参函数;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值