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 (此类型只有一个值),和 -> (函数结构,有时也叫做幂)

#Haskell #PL
0%