这是 AND 运算符的 lambda 演算表示形式:
lambda(m).lambda(n).lambda (a).lambda (b). m(n a b) b
谁能帮助我理解这种表示形式?
要理解如何在 lambda 演算中表示布尔值,考虑一下 IF 表达式“if a then b else c”会有所帮助。这是一个表达式,如果为真,则选择第一个分支 b,如果为假,则选择第二个分支 c。 Lambda 表达式可以非常轻松地做到这一点:
lambda(x).lambda(y).x
会给你第一个参数,并且
lambda(x).lambda(y).y
给你第二个。因此,如果 a 是这些表达式之一,那么
a b c
给出任一b
or c
,这正是我们希望 IF 做的事情。所以定义
true = lambda(x).lambda(y).x
false = lambda(x).lambda(y).y
and a b c
会表现得像if a then b else c
.
审视你的表情(n a b)
,这意味着if n then a else b
.
Then m (n a b) b
means
if m then (if n then a else b) else b
该表达式的计算结果为a
如果两者都m
and n
are true
, 并b
否则。自从a
是你的函数的第一个参数并且b
是第二个,并且true
已被定义为一个给出两个参数中第一个参数的函数,那么如果m
and n
都是true
,整个表达式也是如此。否则就是false
。这只是定义and
!
这一切都是由 Alonzo Church 发明的,他发明了 lambda 演算。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)