教会数字:我应该如何解释表达式中的数字?

时间:2013-07-29 10:51:48

标签: lambda-calculus church-encoding

有人可以通过替换向我解释我们如何得到一个数字“零”或其余的自然数?

例如值:“零”

λf.λx.x

如果我将这个表达式应用于另一个表达式:

"(λf.(λx.x)) a"

然后使用替换:

:=[a/f](λx.x)
:=(λx.x)
我错过了什么?我该如何解释这些数字表达式?

3 个答案:

答案 0 :(得分:2)

教会数字n是一个函数,它接受另一个函数f并返回一个函数,该函数将f应用于其参数n次。所以0 a(正如您所说,0λf.λx.x )返回λx.x,因为a适用x 0次。

1 a为您提供λx. a x2 a为您提供λx. a (a x)等等。

答案 1 :(得分:2)

以下是paperErhan Bagdemir的评论中基于answer的解释{/ 3}}。

要掌握的要点:

  • 所有教会数字都是两个参数的函数;
  • 对于教会数字,暗示:
    • func handleNotificationFuncName(_ notification: Notification) { let storyboard = UIStoryboard(name: "StoryboardName", bundle: Bundle.main) if let vc = storyboard.instantiateViewController(withIdentifier: "pdfDisplayViewController") as? pdfDisplayViewController { present(vc, animated: true, completion: nil) } } - 是'接班人'功能(即接受教会数字并返回教堂数字的功能,它基本上和增量);
    • f - 是一个(教会数字)值,代表零' (计算起点)。

牢记这一点:

x

将等于零,如果我们将通过相应的λf . λx . x 在这种特殊情况下它不会将哪个函数作为f传递,因为它永远不会已应用)和f

x

以下:

λf . λx . ZERO

将评估为1:

λf . λx .  fx

和此:

λf . λx . INCREMENT ZERO

将符合2:

λf . λx . f f x

等等,对于所有连续的数字。

查看我的sepp2k与其他人({密切相关的)(broader) answer

答案 2 :(得分:0)

教堂数字n(例如2)表示对任何给定参数n次(此处两次)应用任何给定函数的“动作”。

根据定义,教堂数字是具有两个参数的函数,即
1)一个功能
2)应用提供的函数的参数,表达式或值。

当提供的功能为后继功能且提供的第二个参数为Zero时,您将获得数字。 (在上面的示例中为2)

根据定义,教堂数字2

λf . λx . f( f( x)) 

,显然这是一个需要两个参数的函数。

在将后继函数(即f(x)= x + 1作为第一个参数,零作为第二个参数)传递给该函数时,我们得到...

f(f(0))  
=f(1) 
=2

此解释有点简化,因为在lambda演算中,后继函数的定义不为零。

参考:http://www.cse.unt.edu/~tarau/teaching/GPL/docs/Church%20encoding.pdf 教会编码的绝佳解释