lambda 演算
$\lambda$ 演算是什么
是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义、函数如何被应用以及递归的形式系统。—— WikiPédia
在最简单的lambda演算中,只使用以下的规则来建构lambda项:
语法 | 名称 | 描述 |
---|---|---|
x | 变量 | 用字符或字符串来表示参数或者数学上的值或者表示逻辑上的值 |
(λx.M) | 抽象 | 一个完整的函数定义(M是一个 lambda 项),在表达式中的 x 都会绑定为变量 x。 |
(M N) | 应用 | 将函数M作用于参数N。 M 和 N 是 lambda 项。没有歧义时,空格可以省略 |
- 在表达应用时则向左结合,比如 f x y 应该被理解为 (f x) y 而不是 f (x y)。
- $\lambda$ Viewer
数据类型的结构与解构
data Term = Var Var | Lam Var Term | App Term Term
data Var = V String
data 类型 = 构造子 类型 ... | 构造子 类型 ... | ...
这里面的类型又叫作 代数数据类型 (Algebraic Data Type, 或简称 ADT)
ADT 的基本结构
Product:
A×B
的值里面,同时要有一个 A 类型的值与一个 B 类型的值。tuple
Sum:
A+B
的值可以是 A 类型的值,也可以是 B 类型的值。其它结构:
0
(此类型不包含任何值),1
(此类型只有一个值),和->
(函数结构,有时也叫做幂)