Functional programming 如何理解lambda表达式中的布尔表达式?

Functional programming 如何理解lambda表达式中的布尔表达式?,functional-programming,lambda-calculus,Functional Programming,Lambda Calculus,在教科书中,这是“真”的表达式:λxy.x,这是什么意思?(是否需要更换x或y?)。还有“IFELSE”表达式:λfxy.fxy,我不知道什么是f,也不知道如何理解这个表达式。教科书似乎在描述。它们是值true和false的可能编码之一 如果您对什么λx y感到困惑。x表示-这只是λx的简写。λy。x。下面是将布尔值应用于某些变量时发生的情况: true a b = (λ x. λ y. x) a b = (λ y. a) b = a false a b = (λ x. λ y. y) a b

在教科书中,这是“真”的表达式:λxy.x,这是什么意思?(是否需要更换x或y?)。还有“IFELSE”表达式:λfxy.fxy,我不知道什么是f,也不知道如何理解这个表达式。

教科书似乎在描述。它们是值
true
false
的可能编码之一

如果您对什么
λx y感到困惑。x
表示-这只是
λx的简写。λy。x
。下面是将布尔值应用于某些变量时发生的情况:

true a b = (λ x. λ y. x) a b = (λ y. a) b = a
false a b = (λ x. λ y. y) a b = (λ y. y) b = b
因此,基本上,
true
被编码为lambda,使用两个参数并选择第一个参数,
false
选择第二个参数

至于为什么
ifelse
是这样定义的,请查看其预期用途:

ifelse true a b = (λ f. λ x. λ y. f x y) (λ x'. λ y'. x') a b =
= (λ x. λ y. (λ x'. λ y'. x') x y) a b = (λ y. (λ x'. λ y'. x') a y) b =
= (λ x'. λ y'. x') a b = ... = a
类似地,
ifelse false a b=b
。因此,其定义中的
f
应替换为
true
false

还要注意,
ifelse
实际上并没有做任何有趣的事情。它不必这样做,因为布尔值的定义方式已经使得
ifelse cxy
相当于
cxy
。(与此观察相关的一个概念是eta降低,我相信你的教科书在某处提到了这一点)