Scalaの高次関数

2818 ワード

高次関数:関数に関数を渡す
最初の高次関数:
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の3つのタイプのパラメータがあります.これには2つのパラメータがあり、パラメータfは2つのタイプがそれぞれA、Bのパラメータ、戻り値タイプがCの関数である.関数partialの戻り値も関数で、タイプは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))