如何理解lambda表达式中的boolean表达式?
How to understand the boolean expression in lambda expression?
在教科书上,“真”的表达方式是:λxy.x,那是什么意思呢? (我需要更换 x 或 y 吗?)。而“IFELSE”表达式:λfxy.fxy,我不知道f是什么以及如何理解这个表达式。
教科书上好像在描述Church Booleans。它们是值 true
和 false
.
的可能编码之一
如果您对 λ 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
应该替换为 true
或 false
.
还要注意 ifelse
实际上并没有做任何有趣的事情。它不必,因为布尔值已经以 ifelse c x y
等同于 c x y
的方式定义。 (与这个观察相关的一个概念是eta-reduction,我相信你的教科书在某处提到过这个)
在教科书上,“真”的表达方式是:λxy.x,那是什么意思呢? (我需要更换 x 或 y 吗?)。而“IFELSE”表达式:λfxy.fxy,我不知道f是什么以及如何理解这个表达式。
教科书上好像在描述Church Booleans。它们是值 true
和 false
.
如果您对 λ 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
应该替换为 true
或 false
.
还要注意 ifelse
实际上并没有做任何有趣的事情。它不必,因为布尔值已经以 ifelse c x y
等同于 c x y
的方式定义。 (与这个观察相关的一个概念是eta-reduction,我相信你的教科书在某处提到过这个)