Scala初体验:高阶函数

来源:互联网 发布:淘宝书店哪家好 编辑:程序博客网 时间:2024/05/16 18:25

  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)_



0 0