λ (Lambda)

什么是函数式编程?

函数式编程是一种计算机编程范式,它依赖于模仿数学上的函数。函数式编程本质上是组合各种表达式,表达式包括一些值,变量和函数,函数会应用一些输入参数,然后会进行一些计算,一般会有返回值,函数式编程语言是基于 lambda 演算的。

函数的透明引用(Referential transparency):对于同一个函数,给它相同的参数,然后同样的返回值,表现的像数学上的函数一样。

什么是函数?

如果不用lambda这个词,可能大概知道函数是什么了。函数会用入参和返回值,函数定义了它的入参是什么,然后它的返回值是什么,例如一个加法函数(add),有两个入参,有一个和的返回值。又例如我们有一个函数名为 f,有下面如下关系:

f(1) = A
f(2) = B
f(3) = C

输入的参数的集合是 {1, 2, 3}, 输出的集合的参数是 {A, B, C}, 一个重点是这些关系是怎么定义的,假设当入参是 1 的时候,函数的返回值一定是 A, 而不会出现 f(1) = Xf(1) = Z 这些情况。在前面提到的透明引用,当一个函数有相同的入参,返回值一定是相同的。下面的情况也是满足的,因为对于相同的入参,返回值是确定的,只不过是它们返回值刚好相同了

f(1) = A
f(2) = A
f(3) = A

lambda 结构

lambda 含有:表达式(expression), 变量 和 抽象(abstraction)。expression 可以和变量和抽象,或者它们的组合。expression 可以是变量,这个变量有个名称,但是可以是函数的名称

abstractions 有两部分,head 和 body, head 是 λ(lambda),接着是变量名,body 是函数的其他表达式,如下:

λx.x

lambda λx.x 没有名字,它是一个匿名函数

ch1_1.png

α 等价 (Alpha equivalence)

这里的变量 x 没有什么特别的意思,它就是一个表示,可以替换成 y 或者 z, 它们都是同一个函数的,这里称这种为 α 等价

λx.x
λy.y
λz.z

β 化简 (Beta reduction)

当函数应用入参的时候,会把入参的表达式替换 body 内相应的值,消除 head 相关的入参,提供一个绑定变量的作用,这个过程称为 β 化简,例如

𝜆x.x

进行 β 化简,应用 2 替换 x,得到

(𝜆x.x)2
      2

Free variables

y 在 body 内,但是没有出现在 head 中,进行参数绑定,y 称为 Free variables

(𝜆𝑥.𝑥𝑦)𝑧
zy

Combinators

body 内出现的变量,在 head 参数中都出现过。就是 Combinators

最后

  • 函数式编程基于表达式,它们可以包含变量,常量值,表达式组合其他表达式和函数
  • 函数有 head body,表达了它需要的参数,和如何进行计算,返回结果
  • 入参变量作为参数替换 body 出现位置相关的地方。都会生成同一个值
  • 函数有一个或多个入参或返回值
  • 函数把入参映射到返回值,对于同一个入参有相同返回值
  • lambda 形如匿名函数 (𝜆𝑥.𝑥 + 1)
  • lambda 演算是表达程序的抽象过程和应用

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,331评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,372评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,755评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,528评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,526评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,166评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,768评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,664评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,205评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,290评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,435评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,126评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,804评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,276评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,393评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,818评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,442评论 2 359

推荐阅读更多精彩内容

  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,966评论 17 410
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,831评论 0 38
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,217评论 9 118
  • 注:之前关于Java8的认知一直停留在知道有哪些修改和新的API上,对Lambda的认识也是仅仅限于对匿名内部类的...
    mualex阅读 2,826评论 1 4
  • 每个人一出生就开始了一场一生的修行,每个人都有涅槃成佛的机会。但每个人最后是否能成佛就不一定了。 我不相信有来生,...
    叶子笑了阅读 305评论 1 0