Scala柯里化和反柯里化

  1. 名詞解釋
    在計算機科學中,柯里化(Currying)是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,並且返回接受餘下的參數且返回結果的新函數的技術。

  2. 柯里化舉例說明

    def curry1[A, B, C](a: A, f: (A, B) => C): B => C =
      (b: B) => f(a, b)

    這個函數的結果是一個高階函數接收一個帶有兩個參數的函數,進行部分應用。即我們有一個A和一個需要A和B產生C的函數,可以得到一個只需要B就可以產生C的函數(因爲我們已經有A了)。就像我拿一個胡蘿蔔換你一個蘋果和香蕉,你已經給了我一個蘋果,只用再給我一個香蕉就可以換胡蘿蔔了。

    再看一個柯里化的例子,把帶有兩個參數的函數f轉換爲只有一個參數的部分應用函數f。

    def curry[A, B, C](f: (A, B) => C): A => (B => C) =
      (a: A) => ((b: B) => f(a, b))
  3. 反柯里化舉例

    實現反柯里化與柯里化正好相反。注意,Scala中的右箭頭=>是右結合的, A=>(B=>C)可以寫爲A => B => C

    def uncurry[A, B, C](f: A=>B=>C): (A, B) => C =
        (a: A, b:B) => f(a)(b)
  4. 參考資料

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