Lambda算子6b: SKI组合子(下)

本文深入探讨Lambda算子中的SKI组合子,通过一系列的展开、替换和规约步骤,逐步解析其运算过程,最终得出计算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  接着昨天的写
继续谈论SKI前,得澄清一件重要的事。我说用S K K可以创建等价于 lambda x . x的东西,并不等于我们可以把S K K归约到lambda x. x。在我们讨论的lambda算子里,我们说”x = y”当且仅当x和y要么完全一样,要么可以通过alpha变换变得一样(所以 lambda x y . x + y 等于 lambda a b . a + b, 但却不等于 lambda x y . y + x)。这叫做intentional equivalence(内涵等价?)。不过另外一种等价关系极其有用。我们称之为extensional equivalence(外延等价?)或extentional equality。在extensional equality里,表达式X和表达式Y相等当且仅当X和Y如前所述等价,或者对任意值a, X a = Y a。从现在开始,我们用“=”或等价指代extensional equality。呵呵,其实编程的时候,equals()也是一个很难实现正确的函数。不然C++不会在STL里加入等价的概念;Java里 ((Long)0L).equals(0) 居然返回false;Ruby里有equal?, eql?,和==;Common Lisp里有eq, eql, equal, 和equalp;而Joshua Bloch在Effective Java里用了整整一节讨论equal。更不用说我们学习逻辑的时候,要仔细定义什么叫做等价。
 
其实,我们可以把 任何lambda表达式转换为等价的组合子项。我们可以如下定义转换方程C, 把lambda表达式转换为SKI组合子表达式:
(1)    C{x} = x
(2)    C{E1 E2} = C{E1} C{E2}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值