Lambda 项可以是:
- 多变的
- lambda 抽象(例如
\x.t) - 应用。如果
t和s是lambda 项,那么ts是一个应用程序。
因此,在左侧(例如(\x.t)a)具有抽象的应用程序看起来不错。它看起来像函数调用。但是当左侧部分是变量或其他应用程序时,应用程序意味着什么?是什么意思ab,((\x.x)a)b或者a(\x.x)如果a和b是变量?
((\x.x)b)c是一个功能应用程序。这里适用b于c。
((\x.x)b)c
= bc
a(\x.y)是一个函数应用程序,将函数a应用于它的唯一参数,它恰好是一个函数,即返回的函数y(一个自由变量)。
lamdba 演算的特点之一是可以轻松地将函数应用于函数,并且函数可以将其他函数作为参数。你的两个例子很好地展示了这两种情况。
编辑有(至少)两个版本的 lambda 演算:无类型和有类型。在您在这里使用的无类型演算中,任何东西都可以应用于任何东西。在类型化演算中存在不是函数的基本类型,例如命题类型和“个体”类型。所以你只能写ab如果类型a是一个函数类型,将类型映射b到某个东西。