这有什么表达意味着什么

时间:2016-02-14 15:30:32

标签: haskell lambda church-encoding

我刚开始学习Haskell,我试图在Haskell中使用lambda演算。我发现这个表达式将教堂数字转换为数字,但我似乎无法弄清楚这个表达式中的0是什么意思。我无法在任何地方找到它:

zero = (\f -> \x -> x)
one = (\f -> \x -> f x)
two = (\f -> \x -> f (f x))

getNum church = church (\x-> (x + 1)) 0

这是让我困惑的最后一个零点。它是基本情况还是这个lambda表达式的一些参数?

1 个答案:

答案 0 :(得分:4)

这是"教堂"的第二个论点。功能。教会数字是在Lambda微积分中计算的一种方式。他们的工作方式与Peano数字类似。在那些你算这个

的人
Z = 0
S Z = 1
S S Z = 2

阅读" Z" as" Zero"和" S" as"接班人"。因此1是0的后继者,2是1的后继者。实际上是它的一元计数。

在Lambda Calculus中你只有函数应用程序,因此你可以将2定义为一个带参数的函数" f"并适用两次。

在你的例子中,教会数字为零,一个和两个被定义。每个都是一个带有两个参数的函数。第一个参数是要应用的函数,第二个参数是要应用它的值。 getnum函数使用函数succ(即\x -> x+1),然后将其应用N次到基本情况" 0"。

你也可以定义

getPeano church = church ('S':) "Z"

这将在Z之前添加正确数量的S"以将教会号码翻译成Peano号码。

相关问题