呼如林
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
提交
取消