偷听会议室老板拷打同事知道什么是 lambda 吗?同时我正在看一篇关于使用aws mqtt的文章,里面提到了aws lambda。我一想,lambda 不就是匿名函数吗,然后呢,似乎我并不了解他,就好像我看到一只鸟,我知道他叫布谷鸟,也许我知道他还叫大杜鹃(实际不知道,我刚刚搜的),英文名叫Cuculus canorus,但是我依旧不了解他(
费曼父亲的教导),那么我深深反思,我不知道什么是 lambda,我现在需要知道一下。所以在这过程里,我问了一些问题,什么是 lambda、什么是 Lisp、什么是一等公民、什么是闭包、python 的 map 是啥
什么是Lambda
我有一种中国学生的特性,写东西模糊有一种框架 1. 定义 2. 内容 3. 意义 4. 展望。 感觉这很蠢,但我暂时没有更棒的方式,当然这种文章不会有展望
这个就读 Lambda λ ,希腊字母表第 11 个字母
Lambda - Wikipedia
为什么匿名函数叫 Lambda Anonymous function - Wikipedia
Anonymous functions originate in the work of Alonzo Church in his invention of the lambda calculus, in which all functions are anonymous, in 1936, before electronic computers.[2] In several programming languages, anonymous functions are introduced using the keyword lambda, and anonymous functions are often referred to as lambdas or lambda abstractions. Anonymous functions have been a feature of programming languages since Lisp in 1958, and a growing number of modern programming languages support anonymous functions.
36 年联合抗日呢,该死的小鬼子,Alonzo发明了 lambda 微积分,其中所有函数都是匿名的,当时还没有电子计算机,但是在之后就引用了这个名字,这里有个 Lisp,第一次听说这个语言是 李继刚老师写提示词给 claude 的时候用的,当时看了一眼,我滴天,这是啥?
以下用 python 做例子,我也只会 python 和 javascript
python 中的 lambda 函数就像这样
| |
语法就像是
lambda 参数: 表达式
等价于
| |
什么是 Lisp
函数式编程 (Functional Programming, FP) (像 C, Java, Python 的基础写法)叫命令式编程 (Imperative Programming)
gemini3 解释
函数式编程 (FP) 的思维方式完全不同:
- 函数式: 像是在设计流水线(数学公式)。 它不关心“怎么一步步做”,它只关心“数据怎么转换”。 核心思想:
- 不可变 (Immutability): 数据一旦创建就不能改。你想把 x 变成 x+1?不行,你必须创建一个新的 y 等于 x+1。
- 纯函数 (Pure Function): 函数不能有副作用(比如修改全局变量、打印东西)。给它同样的输入,它永远吐出同样的输出。
- 函数是“一等公民”: 函数可以像数字、字符串一样,被传参数、被返回、被赋值给变量。
例子:
| |
- (defun factorial (n) …):定义函数 factorial,参数是 n。
- (if (<= n 1) …):如果 n 小于等于 1。
- (* n (factorial (- n 1))):计算 n 乘以 (n-1) 的阶乘。
这不是很好读的样子,至少作为代码来说,我不喜欢,数括号很花时间 这是老祖宗级别的语言,虽然现在使用率应该非常低,但是他有很多灵魂都活到了现在 (Lambda, 闭包, 动态类型)
有意思的是,python 的 lambda 是社区贡献者引入的,这个特性 python 作者并不喜欢(我也不喜欢≈我和 python 作者差不多) The fate of reduce() in Python 3000
在这里我再次触发了初学 javascript 的疑问。一等公民和闭包
什么是一等公民和闭包
一等公民(First-class citizen)
有一等就有二等,下面是 gemini 给的解释
闭包(Closure)
闭包的概念是在1960年代为采用lambda演算的表达式的机器求值而开发的,它首次在1970年于PAL编程语言中完全实现,用来支持词法作用域的头等函数。
哈基米装萌给我一个他认为很通俗的解释
闭包 = 函数 + 它“出生”时的环境(随身携带的数据)。
通常情况下,一个函数跑完,它里面的变量就会被销毁(像是一个临时的酒店房间,你退房了,清洁工就把东西清空了)。
但是,如果这个函数在内部定义了一个小函数,并且把这个小函数送(return)了出来:
这个小函数会背着一个背包,背包里装了它在“老家”用到的变量。即使“老家”已经被销毁了,这个小函数依然能从背包里拿出那些变量来用。
这个“背着背包的小函数”,就叫闭包。
来个例子
[python] 显示已折叠代码(21 行)
| |
闭包在实现上是一个结构体,它存储了一个函数(通常是其入口地址)和一个关联的环境(相当于一个符号查找表)。 具体的 wiki 里面写的很详细,可以细细看一遍
python的map是啥
这个 map 混淆到我了。Python map() 函数 | 菜鸟教程 确实没怎么用过
AWS Lambda
AWS Lambda 是亚马逊云服务中的无服务器计算平台,它命名灵感来自 lambda 演算中的匿名函数,但本质是事件驱动的小型计算单元,不同于编程语言里的 lambda 函数实现。不过它们都体现了“小而灵活”的思想。
最后
我就来记下了这些内容,感谢 AI,(希望科技继续发展。早日实现赛博飞升。)开始说梦话
