Scala之高階函式
阿新 • • 發佈:2019-02-11
高階函式:把函式傳給函式
第一個高階函式:
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))