Scala初体验:高阶函数

  Scala可以把函数作为参数传递给另一个函数。即可以写出这样的高阶函数函数:f(g(x)) 。下面举一个高阶函数的例子。

  假如要求写一个求和函数, 它接受一个参数f(n),返回一个从整数a到整数b的求和函数。

def sum(f: Int => Int): (Int,Int) => Int ={
  def sumF(a: Int ,b: Int): Int=
    if(a > b) 0
  else f(a)+sumF(a+1,b)
  sumF                                    // sum  need to return a function 
}

  sum(x => x*x)   意为sum接受一个 f : x => x*x 的函数作为参数所返回的对x的平方求和的函数。这个新得到的二阶函数有两个参数 ,sum(x => x*x)(1,3) 即为从1到3求其平方和。

类似的还可以写出sum(x => x*x*x + 2*x*x + 4*x+5)等二阶函数。

  同时也应该注意到sum函数中嵌套了sumF函数,因为sum必须返回一个函数而不是数值,所以定义了一个sumF函数作为返回的函数。

  拓展: 也可以使用Currying ,sum 返回 Int 值,利用Curring构造函数。这时,sum不再是高阶函数。

def sum(f: Int => Int)(a:Int)(b:Int) : Int={
  if(a >b) 0
  else f(a)+ sum(f)(a+1)(b)
}
val sumSquare = sum(x => x*x)_



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值