楔子
這是一個在計算機歷史用數學演化的方式,具有代表性的規律。
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;
}
}
參考資料