呼如林
2018-09-14 09:21:55
'use strict'; // 定義數字0:var zero = function (f) { return function (x) { return x; }}; // 定義數字1:var one = function (f) { return function (x) { return f(x); }}; // 定義加法:function add(n, m) { return function (f) { return function (x) { return m(f)(n(f)(x)); } }}
1 回答
LEATH
TA貢獻1936條經驗 獲得超7個贊
這就是 lambda calculus 啊,是 Church Numeral 的基礎。
這是將自然數定義為了函數的“作用”,對于某個自函子函數f(x)而言,自然數列(0, 1, 2, 3, ...)被映射成了:x, f(x), f(f(x)), f(f(f(x))), ...
這樣,每個自然數n都被映射為了一個函數,這個函數接受一個自函子函數f()和對應范疇上的對象x,返回一個對應范疇上的對象y,這個y的值是將函數f()在x作用n層得到的結果,可以將這個結果y簡記為f^(n)(x)(^表示冪次,書寫時可以將n寫為上標)。如果我們用一個函數church()來表示這個映射,那么有:church(n, f, x) = f^(n)(x)
那么,自然數m + n就變成了對于x作用m + n層的函數f的作用,那么如何用公式表示這個作用呢?其實就是利用公式f^(m + n)(x) = f^(m)(f^(n)(x)),這個公式如果用church()重寫的話,就有:church(m + n, f, x) = church(m, f, church(n, f, x)),也就是你示例程序里面的那個add(n, m)。
添加回答
舉報
0/150
提交
取消
