Scala 函數式編程_高階函數_Higher Order Function

Scala 函數式編程_高階函數_Higher Order Functionhtml

高階函數的基礎就是 函數做爲參數傳遞給另一個函數,做爲參數的函數能夠是匿名函數或者函數字面量,也包括用def 關鍵字定義的函數。java

http://my.oschina.net/xinxingegeya/blog/359335 shell

http://my.oschina.net/xinxingegeya/blog/359280 編程


什麼是函數式編程

In computer science, functional programming is a programming paradigm(範式) that treats computation as the evaluation of mathematical(數學上的) functions and avoids state and mutable data.函數式編程

函數式編程是一種編程模型,他將計算機運算看作是數學中函數的計算,而且避免了狀態以及變量的概念函數

能夠經過下面這個連接來了解函數式編程lua

參考文章spa

http://www.cnblogs.com/kym/archive/2011/03/07/1976519.html .net

http://www.ibm.com/developerworks/cn/java/j-lo-funinscala3/scala

http://www.cnblogs.com/wzm-xu/p/4064389.html


高階函數

什麼是高階函數?

在數學和計算機科學中,高階函數是至少知足下列一個條件的函數:

  • 接受一個或多個函數做爲輸入

  • 輸出一個函數


函數做爲參數的高階函數

使用高階函數實現各類求和函數,

def cube(n: Int) = n * n * n
def id(n: Int) = n
def square(n: Int) = n * n
def fact(n: Int): Int =
  if (n == 0) 1 else n * fact(n - 1)

// 高階函數
def sum(f: Int => Int, a: Int, b: Int): Int =
  if (a > b) 0 else f(a) + sum(f, a + 1, b)

// 使用高階函數從新定義求和函數
def sumCube(a: Int, b: Int): Int = sum(cube, a, b)
def sumSquare(a: Int, b: Int): Int = sum(square, a, b)
def sumFact(a: Int, b: Int): Int = sum(fact, a, b)
def sumInt(a: Int, b: Int): Int = sum(id, a, b)

sumCube(1, 10)
sumInt(1, 10)
sumSquare(1, 10)
sumFact(1, 10)

sum就是一個高階函數,由於它接收一個函數做爲入參。


函數做爲返回值的高階函數

以上都是高階函數接收一個函數參數的示例,高階函數的返回值還能夠是一個函數,那麼如何定義返回函數的高階函數,以下,

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
}


看一下在scala 的shell 中怎麼表示的這種類型,以下,

scala> 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: (f: Int => Int)(Int, Int) => Int

scala>

sum 的類型就是 

sum: (f: Int => Int)(Int, Int) => Int

下面來解釋一下它,

f:Int=>Int 是sum函數接收的參數,該參數是一個函數。 

":" 號後面的 (Int,Int) => Int 是sum函數的返回值,又(Int,Int) => Int是一個函數的類型:接收兩個Int型的數

如何調用這個函數sum,以下,

scala> sum(x=>x*x)(1,4)
res0: Int = 30

==============END==============

相關文章
相關標籤/搜索