lambda calculus:将两个值传递给单个参数而不进行curry

den*_*ini 7 lambda-calculus currying

我无法理解为什么在无类型lambda演算中允许以下beta减少:

(?x.x y) (u v) -> ((u v) y)
Run Code Online (Sandbox Code Playgroud)

具体来说,我无法理解如何可以传递两个参数uv到一个单一的参数x?x.x一部分.允许以上不应该使用currying并有两个参数?像这样-

(?x.(?y.(x y))) (u v)
Run Code Online (Sandbox Code Playgroud)

Fre*_*Foo 11

特别是我无法理解如何传递两个参数u和v

你没有传递两个参数uv.您传递的(u v)是单个值或术语:u应用于的值v.

将其与普通算术进行比较:您可以将一个函数应用于sin复合项,例如sin(x + 1)因为x+1表示单个值,即使它是将函数+应用于两个参数x1.