Scala之高阶函数

高阶函数:把函数传给函数

第一个高阶函数:

def formatResult(name:String,n:Int,f:Int=>Int)={
    val msg="The %s of %d is %d."
    msg.format(name,n,f(n))
}

formatResult是一个高阶函数,他接受一个函数f为参数,参数的类型是Int=>Int,表示接受整型并返回一个整型结果。

多态函数
通常,在写高阶函数时,希望写出的代码能够适用于任何类型,它们被称为“多态函数”,有时也叫“泛型函数”。

def partiall[A,B,C](a:A,f:(A,B)=>C):B=>C

函数partiall有三个类型参数:A,B,C。它带有两个参数,参数f是一个有两个类型分别为A,B的参数、返回值类型为C的函数。函数
partiall的返回值也是一个函数,类型为B=>C。
我们来尝试练习下:
一、实现isSorted方法,检测Array[A]是否按照给定的比较函数排序。

def isSorted[A](as:Array[A],ordered(A,A)=>Boolean):Boolean

二、实现一个高阶函数,可以组合两个函数为一个函数
def compose[A,B,C](f:B=>C,g:A=>B):A=>C

ANSWERS:

一、
def isSorted[A](as: Array[A], ordered: (A,A) => Boolean): Boolean = {
  @annotation.tailrec
  def go(n: Int): Boolean =
    if (n >= as.length-1) true
    else if (ordered(as(n), as(n+1))) false
    else go(n+1)

  go(0)
}

二、

def compose[A,B,C](f: B => C, g: A => B): A => C =
  a => f(g(a))

你可能感兴趣的:(Scala)