应用和抽象的 lambda 演算优先级
lambda calculus precedence of application and abstraction
Application has higher precedence than abstraction.
从这个意义上讲,什么是 lambda 演算抽象?我对有什么优先权感到困惑?
Lambda 抽象是 λx.M
,对于某些变量 x
和任意项 M
。
应用程序是 (MN)
,对于某些任意项 M
和 N
。
Preccedence 是指如果可以多次读取则先执行几个操作中的哪一个,因为省略括号导致该术语有歧义。例如,在算术中,约定乘法优先于加法,这意味着 5+2×3
读作 5+(2×3)
而不是 (5+2)×3
。乘法运算符首先被评估并绑定最接近它的项,加法是次要的,嵌入乘法项。
W.r.t。对于 lambda 演算,应用程序优先于抽象的约定意味着在有疑问的情况下,因为括号被省略,你将首先尝试形成一个应用程序,然后才执行抽象,因此应用程序 "binds" 更强大,并且抽象术语将在以后形成并包含应用术语。
例如,λx.M N
原则上可以读作 λx.(MN)
或 (λx.M)M
,但由于应用程序优先于应用程序,因此您首先形成可能的应用程序 (MN)
然后是抽象 λx.(MN)
。如果反过来,即如果抽象优先于应用,那么你将首先尝试形成一个抽象术语 (λx.M)
,然后应用你已经得到的术语 ((λx.M)M)
.
因此,通过定义应用程序优先于抽象,λx.M N = λx.(MN)
,而不是 ((λx.M)M)
.
Application has higher precedence than abstraction.
从这个意义上讲,什么是 lambda 演算抽象?我对有什么优先权感到困惑?
Lambda 抽象是 λx.M
,对于某些变量 x
和任意项 M
。
应用程序是 (MN)
,对于某些任意项 M
和 N
。
Preccedence 是指如果可以多次读取则先执行几个操作中的哪一个,因为省略括号导致该术语有歧义。例如,在算术中,约定乘法优先于加法,这意味着 5+2×3
读作 5+(2×3)
而不是 (5+2)×3
。乘法运算符首先被评估并绑定最接近它的项,加法是次要的,嵌入乘法项。
W.r.t。对于 lambda 演算,应用程序优先于抽象的约定意味着在有疑问的情况下,因为括号被省略,你将首先尝试形成一个应用程序,然后才执行抽象,因此应用程序 "binds" 更强大,并且抽象术语将在以后形成并包含应用术语。
例如,λx.M N
原则上可以读作 λx.(MN)
或 (λx.M)M
,但由于应用程序优先于应用程序,因此您首先形成可能的应用程序 (MN)
然后是抽象 λx.(MN)
。如果反过来,即如果抽象优先于应用,那么你将首先尝试形成一个抽象术语 (λx.M)
,然后应用你已经得到的术语 ((λx.M)M)
.
因此,通过定义应用程序优先于抽象,λx.M N = λx.(MN)
,而不是 ((λx.M)M)
.