楔子

這是一個在計算機歷史用數學演化的方式,具有代表性的規律。

Lambda (λ) Calculus

Function Abstraction

能夠用簡單的方式來呈現函數

λx.x^2 + 1

用 js 來表示

let res = x => x * x + 1

Function Application

何謂 β-reduction(beta reduction) ? 就是把「值」代入取得最後的計算結果

let res = (x => x * x + 1)(3)

但有些情況不符合 curry 的表示法

λxy.x*y

就應該轉換成

(λx.(λy.x*y))

但其實 ( ) 是可以被簡化的

λx.λy.x*y

如果先代入一個數值 5

(λx.(λy.x*y)) (5) = (λy.5*y)

再代入 7

(λy.5*y)(7) = 35

用 javascript 來表示

function product(x, y) {
  return x * y;
}

  product(5, 7) //retuns 35

// curry
function product (x) {
   return function (y) {
     return x * y;
   }
 }

參考資料