如何理解lambda表达式中的boolean表达式?

How to understand the boolean expression in lambda expression?

在教科书上,“真”的表达方式是:λxy.x,那是什么意思呢? (我需要更换 x 或 y 吗?)。而“IFELSE”表达式:λfxy.fxy,我不知道f是什么以及如何理解这个表达式。

教科书上好像在描述Church Booleans。它们是值 truefalse.

的可能编码之一

如果您对 λ x y. x 的含义感到困惑 - 这只是 λ x. λ y. x 的 shorthand。以下是将布尔值应用于某些变量时发生的情况:

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 应该替换为 truefalse.

还要注意 ifelse 实际上并没有做任何有趣的事情。它不必,因为布尔值已经以 ifelse c x y 等同于 c x y 的方式定义。 (与这个观察相关的一个概念是eta-reduction,我相信你的教科书在某处提到过这个)