let TRUE = lambda x y . x
let FALSE = lambda x y . y
现在我们就可以写“if-then-else”函数了(记到哈,lambda算子理论里所有东东都是函数)。这个函数的第一个参数是一个条件表达式,第二个参数是当第一个参数为真时返回的表达式,而第三个参数自然是当第一个参数为假时返回的表达式了。相当于我们的if cond then true_expr else false_expr:
let IfThenElse = lambda cond true_expr false_expr . cond true_expr false_expr
为了我们刚定义的布尔值有用,我们还得定义一些常用的逻辑操作先:
let BoolAnd = lambda x y . x y FALSE
let BoolOr = lambda x y. x TRUE y
let BoolNot = lambda x . x FALSE TRUE
上面定义了常用的“与”,“或”,和“非”操作。我们可以稍微考查一下它们的机制。
BoolAnd TRUE FALSE (也就是 true && false):
我们把TRUE和FALSE替换为它们的定义: BoolAnd (lambda x y . x) (lambda x y . y)
执行Alpha 替换避免混淆变量名:BoolAnd (lambda xt yt . xt) (lambda xf yf . yf)
然后把BoolAnd替换为它的定义:(lambda x y . x y FALSE)(lambda xt yt . xt) (lambda xf yf . yf)
执行Beta替换:(lambda xt yt . xt) (lambda xf yf . yf) FALSE
呵呵,再Beta一把:(lambda xf yf . yf)。
最后的结果lambda xf yf . yf就是FALSE的定义。也就是说, BoolAnd TRUE FALSE = FALSE。神奇吧?看起来只是简单的替换:变量替换,参数替换,但最后的结果确意义重大。这让我想起当年第一次读GEB时不由自主地感叹,看似简单的句法层面的操作竟然能得出迷幻般的结果。
我们再来看看 false && true, 也就是 BoolAnd FALSE TRUE。“噫,那不是和我们刚推演过的BoolAnd TRUE FALSE一样么!”。眼尖的老大们可能要问。嗯,我们知道布尔逻辑里的操作是服从交换率的,所以 a && b 等于 b && a。可惜我们在用lambda算子定义布尔操作,是不是服从交换率,需要我们证明。如果BoolAnd FALSE TRUE的结果是FALSE,我们也就证明了BoolAnd符合交换率:
定义替换:
BoolAnd (lambda x y . y) (lambda x y .x)
Alpha替换:
BoolAnd (lambda xf yf . yf) (lambda xt yt . xt)
替换BoolAnd的定义:
(lambda x y .x y FALSE) (lambda xf yf . yf) (lambda xt yt . xt)
Beta替换:
(lambda xf yf . yf) (lambda xt yt . xt) FALSE
再来Beta替换: lambda xt yt. xt, 也就是FALSE
所以说,
BoolAnd FALSE TRUE = FALSE
最后,我们来看看BoolAnd TRUE TRUE:
定义替换:
BoolAnd (lambda x y . x) (lambda x y . x)
Alpha替换:
BoolAnd (lambda xa ya . xa) (lambda xb yb . xb)
替换BoolAnd的定义:
(lambda x y . x y FALSE) (lambda xa ya . xa) (lambda xb yb . xb)
Beta替换:
(lambda xa ya . xa) (lambda xb yb . xb) FALSE
再次Beta替换:
(lambda xb yb .xb),这个正是TRUE的定义
所以我们得到
BoolAnd TRUE TRUE = TRUE
相关推荐
AWS Lambda和Serverless(散布了Alexa) 您需要的工具 带有凭证的AWS帐户 节点和npm golang(可选) 无服务器,ask-cli已安装npm install -g serverless ask-cli 比赛计划 解释如何使用cloudformation和lambda进行...
JavaScript版lamdba演算
个人经验总结了,mvc3中如何使用lamdba表达式和lamdba表达式如何用foreach循环代替
1.2 函数式接口- Consumer/Predicate/Function/Supplier 4 1.1.4 什么是函数式接口 4 1.1.5 Consumer接口 5 1.1.6 Function接口 6 1.1.7 Supplier接口 8 1.1.8 Predicate接口 9 1.3 方法引用和构造器 12 1.2.1 方法...
1. 为什么要使用委托? 2. 委托概述 3. C#中如何定义和使用委托 4. C#中的多播委托 5. C#中的匿名委托 6. 泛型委托 7. C#中的事件 8. Lamdba表达式
lamdba表达式,此写法是用来测试用,只做参考,不可复制
RxJava2+Retrofit2+MVP+lamdba仿微信朋友圈Demo
RxJava2+Retrofit2+MVP+lamdba仿微信朋友圈Demo
一、Java8(JDK1.8)新特性 1、Lamdba表达式 2、函数式接口 3、方法引用和构造引用 4、Stream API ...4、使用并行流和串行流; 5、最大化较少空指针异常Optional; 其中最为核心的是Lambda表达式和Stream API
asp.net 写的一些小程序,上传上去希望大家下载下来看看,也希望大家能多上传有用的资料
线程池(多线程)+异步+委托(lamdba)+UI跨线程(界面实时响应)+递归(树形实时更新)+TCPIP扫描,综合起来的一个实例,对于初学者有很大的帮助
本apk包只是一个C++可用性的...1、使用std::function和std::bind实现sigslot机制; 2、使用C++11的Lambda表达式 3、在C++代码中回调Java对象的方法 详细描述请参考:http://blog.csdn.net/dyw/article/details/8099947
AWS_CDK_playground 建国档案馆CSV和DynamodB en menos de 5 minutos 可以从档案库中获取基本...Lamdba: 提供服务的AWS Lambda服务提供商,行政管理服务员,基础设施管理公司,企业管理服务商等。 Conocemásacá:
使用Linq语法与Lambda表达式分组取泛型数组某列的最小值/最大值
它解决了以下优化问题: min_X || YX||_1 + lambda ||Dh*X||_1 + lamdba ||Dv*X||_1 + mu ||X||_* X:高光谱图像Y:压缩测量Dh、Dv:水平和垂直有限差分算子||X||_* : 矩阵 X 的核范数 ---------------------------...
它解决了以下优化问题: min_X || Y-AX || _1 + lambda || Dh * X || _1 + lamdba || Dv * X || _1 + mu || X || _ * X:高光谱图像A:稀疏二进制测量矩阵Y:压缩测量Dh、Dv:水平和垂直有限差分算子||X||_* : 矩阵...
2.2.10 匿名方法和Lamdba表达式 2.3 综合实例:C#高亮编辑及编译运行器 2.4 小结 第3章 LINQ基本子句介绍 3.1 概述 3.2 from子句 3.2.1 单个from子句 3.2.2 复合from子句 3.2.3 多个from子句 3.3 ...
Lambda主要用于运行您提供其支持的运行时之一(或您选择的自定义运行时)的任何业务逻辑。 像在任何应用程序中一样,需要进行某种操作的外壳并不稀奇-毕竟UNIX非常强大! :female_sign::female_sign: 幸运的是,...
在文件svm_test.m中运行示例SVM_PEGASOS 使用 PEGASOS 求解器创建 SVM 模型矩阵 x(mxn) 包含... SVM 模型由 alpha 系数组成, 训练集矩阵 x(mxn),标签向量 y(mx1), lamdba和T迭代。 内核的选择定义在类型('l' 表示线
走进Java Lambda