Scala實踐理解高階函數

1,高階函數

Scala支持:

1,函數是第一等公民

1,把函數做爲實參傳遞給另外一個函數

2,把函數作爲返回值返回

3,把函數賦值給變量

4,把函數存儲在數據結構中

Scala中,函數就像普通變量一樣,同樣也具有函數的類型。

2,函數類型

函數類型的格式爲A => B,表示一個接受類型A的參數,並返回類型B的函數

例:Int => String 是把整型映射爲字符串的函數類型

3,高階函數

用函數作爲形參或者返回值的函數,稱爲高階函數。

例如:

 

4,匿名函數

匿名函數就是函數常量,也稱爲函數文字量,定義格式爲

(形參列表)=> {函數體}

5,柯里化

柯里化函數把具有多個參數的函數轉化爲一條函數鏈,每個節點上是單一參數。

例子:以下兩個add函數是等價的

Def add(x: Int, y:Int)=x+y

Def add(x: Int,)( y:Int)=x+y  //scala裏柯里化的語法

應用例子:

 

可以看到,在函數式編程中,我們可以基於一些通用性的函數,利用偏應用函數柯里化這些技術來定義構造新的函數,而不需要重新構造定義一些新的函數出來,這就是函數式編程的魅力所在

6Scala遞歸與尾遞歸

1遞歸函數

遞歸函數在函數式編程中是實現循環的一種技術(函數式編程沒有循環語句,通過遞歸實現)。

例子:

 

遞歸層數深會導致堆棧溢出,可對遞歸進行優化,即尾遞歸。

7,尾歸遞

尾遞歸函數中所有遞歸形式的調用都出現在函數的末尾。

當編譯器檢測到一個函數調用是尾遞歸時,它就覆蓋當前的活動記錄而不是在棧中去創建一個新的。可避免堆棧溢出。

 

8綜合性例子求


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章