Lambda演算(一)
写于软工一学完Lambda演算的一个星期多后,感觉对这个东西依然晕晕的,查了一些资料之后借此随笔来梳理一下,加深理解。
Lambda 演算
Definition
1. 项
项是 演算中最基本的概念,可以递归地定义:
- 变量
假设我么有一个无穷字符串集合,其元素称为变量。例如:x 是一个变量。变量可以是一个字母或者一个字符串,表示一个参数(形参)或者一个值(实参)。
- 原子
每一个变量都是一个 项。
- 抽象
若 M 是一个 项,那么, x.M是一个 项。简单来说可以看作生成了一个匿名的函数,有形参 x。
- 应用
若 M,N都是 项,则 (MN) 也是一个 项。简单来说可以看作把实参 N 代入函数 M。
注意:函数的输入也可以是函数。
2. 符号约定
我们按一下符号约定使用符号:
- 用大写字母如 M, N 表示任意 项,用小写字母和希腊字母如 表示变量。
- 对于括号,有以下省略约定:
- 项最外层的括号可以直接省略。如 () 可以省略为.
- 左结合的应用型 项,括号可以省略。如 (((MN)P)Q) 可以省略为 MNPQ.
- 抽象型的 项 可以省略为 即默认情况下 的管辖范围尽量长。
3. 自由变量与绑定变量
不受约束的变量是自由变量,如 中 x 是约束变量,y,z 是自由变量,这和数理逻辑里的概念是一样的。如果一个项没有自由变量,则它是一个组合子。
4. 柯里化
某些时候我们需要表达多元的函数,比如 ,但是 函数只能接受一个参数,注意到 函数的输入也可以是函数,因此这时我们可以使用柯里化,分层地定义,如,在内层函数中 x 可视作常量。
演算公理系统
1. 变换
类似数理逻辑里面的改名规则,
2. 规约
其实就是用实参替换函数里的形参。如:,以及
Practice
阶段总结
到此,我们基本建立了 演算的大厦,它包括三条定义:原子,抽象,应用,和两条规则, 变换和 规约,以及约定了一些符号使用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义