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==============