Functional programming 如何理解lambda表达式中的布尔表达式?
在教科书中,这是“真”的表达式:λxy.x,这是什么意思?(是否需要更换x或y?)。还有“IFELSE”表达式:λfxy.fxy,我不知道什么是f,也不知道如何理解这个表达式。教科书似乎在描述。它们是值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
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降低,我相信你的教科书在某处提到了这一点)