Lambda 使用教会数字的公式
定义了一些用于教会数字的公式,如Lambda 使用教会数字的公式,lambda,lambda-calculus,church-encoding,Lambda,Lambda Calculus,Church Encoding,定义了一些用于教会数字的公式,如 SUCC := λn.λf.λx.f (n f x) 在他第一次定义lambda演算的论文中,他说 ..两个变量的函数,其值取形式良好的 公式F和X是递归的形式 稍后在他的论文中,他调用了这个函数B(m,n) 如何使用所有这些信息来描述像B这样的函数如何在suc1 我知道我们必须计算出输入和输出作为素数的幂,因为在整个论文中,他使用了哥德尔的编号系统,但是我发现很难把它们全部拼凑起来。我使用了带有javascript的lambda演算。我将尝试展示一些小示例,
SUCC := λn.λf.λx.f (n f x)
在他第一次定义lambda演算的论文中,他说
..两个变量的函数,其值取形式良好的
公式F和X是递归的形式
稍后在他的论文中,他调用了这个函数B(m,n)
如何使用所有这些信息来描述像B
这样的函数如何在suc1
我知道我们必须计算出输入和输出作为素数的幂,因为在整个论文中,他使用了哥德尔的编号系统,但是我发现很难把它们全部拼凑起来。我使用了带有javascript的lambda演算。我将尝试展示一些小示例,
SUCC
和函数B
aka Bluebird/Compose如何工作以及如何组合
首先是一个带有教会数字的小提示(JS):
对于JS中的教堂数字,SuccesorSUCC:=λnfx.f(nfx)
:
constsucc=n=>f=>x=>f(n(f)(x))
。
我们可以看到,succ
-函数只需要取一个教堂数字,然后在前面添加一个f
,这样带有主体f(x)
的succ(n1)
将是f(x))
。因此,它最终总共完成了f
的1+n合成
// example creating new Church-Numbers with the Succesor-Function
const n4 = succ(n3)
const n5 = succ(n4)
// or do Addition with Church-Numbers
const n7 = n2(succ)(n5)
const n10 = n5(succ)(n5)
//to test if it works, us the helper-function churchtoJsNum
const churchtoJsNum = n => n(x => x + 1)(0)
churchtoJsNum(n10) // 10
还有另一种编写后继函数的方法,因为我们正在进行n次复合:复合函数。Smullyan根据咖喱的B
combinator将其命名为蓝鸟
B:=λfgx.f(gx)
在JS中:const B=f=>g=>x=>f(g(x))
现在可以组合succ
和B
-功能
const succ = n => f => x => B(f) (n(f)) (x)
现在我们有了一个实际的复合函数,我们可以定义后续函数,而不必提及最终的x值参数
constsucc=n=>f=>B(f)(n(f))代码>
const succ = n => f => x => B(f) (n(f)) (x)