Math 左边没有抽象的应用程序的含义是什么?
可以是:Math 左边没有抽象的应用程序的含义是什么?,math,lambda-calculus,Math,Lambda Calculus,可以是: 变数 lambda抽象(例如\x.t) 应用程序。如果t和s是,则ts是一个应用程序 因此,左侧部分带有抽象的应用程序(例如(\x.t)a)看起来不错。它看起来像是函数调用。但当左边部分是变量或其他应用程序时,应用程序意味着什么?如果a和b是变量,((\x.x)a)b或a(\x.x)是什么意思?(\x.x)b)c是一个函数应用程序。这里它将b应用于c ((\x.x)b)c = bc a(\x.y)是一个函数应用程序,将函数a应用于其唯一的参数,该参数恰好是一个函数,即返回y(自由
- 变数
- lambda抽象(例如
)\x.t
- 应用程序。如果
和t
是,则s
是一个应用程序ts
(\x.t)a
)看起来不错。它看起来像是函数调用。但当左边部分是变量或其他应用程序时,应用程序意味着什么?如果a
和b
是变量,((\x.x)a)b
或a(\x.x)
是什么意思?(\x.x)b)c
是一个函数应用程序。这里它将b
应用于c
((\x.x)b)c
= bc
a(\x.y)
是一个函数应用程序,将函数a
应用于其唯一的参数,该参数恰好是一个函数,即返回y
(自由变量)的函数
lamdba演算的一个特点是函数可以很容易地应用于函数,并且函数可以将其他函数作为参数。您的两个示例很好地说明了这两种情况
编辑lambda演算有(至少)两种版本:非类型化和类型化。在这里使用的非类型化演算中,任何东西都可以应用于任何东西。在类型化演算中,存在非函数的基本类型,例如命题类型和“个体”类型因此,如果
a
的类型是将b
的类型映射到某个对象的函数类型,那么你只能编写ab
。因此,如果a
和b
是变量,那么ab
的类型就不正确了?我编辑了答案,想说一些关于类型的事情。如果您的表达式来自非类型的lambda演算,那么无需担心。