【发布时间】:2019-08-12 10:35:37
【问题描述】:
Application has higher precedence than abstraction.
从这个意义上说,什么是 lambda 演算抽象?我对有什么优先权感到困惑?
【问题讨论】:
标签: apply abstraction operator-precedence lambda-calculus
Application has higher precedence than abstraction.
从这个意义上说,什么是 lambda 演算抽象?我对有什么优先权感到困惑?
【问题讨论】:
标签: apply abstraction operator-precedence lambda-calculus
Lambda 抽象是λx.M,对于一些变量x 和任意术语M。
应用程序是(MN),对于一些任意术语M 和N。
优先是一个问题,即如果可能读取多个操作,则首先执行几个操作中的哪一个,因为由于省略了括号,该术语不明确。例如在算术中,约定乘法优先于加法,这意味着5+2×3 被读作5+(2×3) 而不是(5+2)×3。乘法运算符首先被评估并绑定最接近它的项,加法是次要的,嵌入乘法项。
W.r.t.对于 lambda 演算,应用程序优先于抽象的约定意味着如果由于省略括号而产生疑问,您将首先尝试形成应用程序,然后才执行抽象,因此应用程序“绑定”更强,并且抽象术语将稍后形成并包含应用程序期限。
例如,λx.M N 原则上可以读作λx.(MN) 或(λx.M)M,但由于应用程序优先于应用程序,因此您首先形成可能的应用程序(MN),然后形成抽象λx.(MN)。如果反过来,即如果抽象优先于应用程序,那么您将首先尝试形成一个抽象术语(λx.M),然后使用您已经获得的术语((λx.M)M)进行应用程序。
因此,通过定义该应用程序优先于抽象,λx.M N = λx.(MN),而不是((λx.M)M)。
【讨论】: