根据lambda演算,应将λxyz.xz(yz)
视为λxyz.xz
到(yz)
的应用,或者将xz(yz)
中的括号简单地表示操作应类似于{ {1}}而不是(xz)(yz)
,而整个((xz)y)z
都在函数“ body”中吗?
我认为这是一个抽象,应用程序必须像xz(yz)
那样编写,但是我的理解很差,所以我想检查一下。
答案 0 :(得分:0)
正确。确切地说,这取决于lambda术语语法的确切定义,更确切地说,取决于省略括号的规则,但是这些规则有约定。特别是通常
xz
应用于yz
,然后
在x
,y
和z
上进行抽象,而不是首先形成抽象λxyz.xz
,然后将结果项嵌入到yz
的应用中(这就是如果抽象的优先级高于应用程序,则会得到结果); xzyz
(在yz
周围没有括号)将被读为((xz)y)z
,并表示xz
适用于yz
,您需要将术语yz
括起来。因此,您怀疑λxyz.xz(yz)
是xz(yz)
的三倍抽象,xz
本身是yz
到x
的应用,z
也是{ {1}}至y
和z
至λx.(λy.(λz.(xz(yz))))
。
在所有方括号中,术语为λxyz.xz(yz): abstraction
|- x: variable
|- λyz.xz(yz): abstraction
|- y: variable
|- λz.xz(yz): abstraction
|- z: variable
|- xz(yz): application
|- xz: application
| |- x: variable
| |- z: variable
|- yz: application
|- y: variable
|- z: variable
。
因此,该术语的语法树如下所示:
λxyz.xz
您还正确地怀疑,将yz
应用于(λxyz.xz)yz
的应用将写为var lookUpMapping = {
0: "Available",
3: "Assigned"
};
this.columnDefs = [
{
filter: "agSetColumnFilter",
refData: lookUpMapping
}
];
。