lamda运算学习笔记

lamda运算学习笔记lamda->Llamda演算至少从表面上看,有着这样一种企图:将所有运算操作,以及自然数都抽象成“函数”(再一次见识到函数这个概念的伟大)。下面简单的介绍下lamda演算。lamda演算的原始定义看起来比较无聊:(Lx.[fx])a=fa上式用熟悉的概念翻译,就是自变量为x的函数f(x),代入x=a,得f(a)但是这里有

大家好,又见面了,我是你们的朋友全栈君。

lamda -> L

lamda演算至少从表面上看,有着这样一种企图:
将所有运算操作,以及自然数都抽象成“函数”(再一次见识到函数这个概念的伟大)。下面简单的介绍下lamda演算

lamda演算的原始定义看起来比较无聊:

(Lx. [fx]) a = fa

上式用熟悉的概念翻译,就是自变量为x的函数f(x),代入x=a,得f(a)

但是这里有一个扩展:不仅f本身是函数,而且x和a也是函数!而且f也可以作为自变量,即

(Lf. [fx]) g = gx

至此,可以看出,“L”后面至“.”前面的符号其实就是自变量

接下来我们可以看看如何用这种定义表示自然数:

考虑复合函数的表示:

(Lf. [f(fx)]) g = g(gx)

如果做的更彻底一些,把x也当做自变量(没错,这就是二元函数的表示):

Lf. [Lx. [f(fx)]]

将上式缩写为

Lfx. [f(fx)]

并且将“2”的“函数”表达形式,定义为:

2 = Lfx. [f(fx)] (此时,”2″是一个函数而不仅仅是一个数字)

于是,我们有这么一个结论:2重复合函数表示“2”

类似地,我们得到其他自然数的定义:

3 = Lfx. [f(f(fx))]

4 = Lfx. [f(f(f(fx)))]

1 = Lfx. [fx]

0 = Lfx. [x]

… …

接下来,lamda演算的神奇之处在此展开:

考虑函数S = Labc. [b((ab)c)] 的用处,将3代入函数:

S 3 

= Labc. [b((ab)c)] 3

= Lbc. [b((3 b)c)] (实际上即代入a = 3)

= Lbc. [b(b(b(bc)))]

= 4

可见,S的作用就是“+1”操作

上述函数S的神奇之处在于,运用完全抽象的函数运算,取代具体的算术运算。

【写于2012年11月】


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138797.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号