从 λ 演算到类型系统:深入探索编程表达与类型控制
1. λ 演算中的类型与函数表达
1.1 类型定义与 λ 表达式映射
在 λ 演算中,具有 m 个构造器的类型定义可以映射为 m 个 λ 表达式。例如,对于类型定义,每个构造器都有对应的 λ 表达式:
- (C_1 \equiv \lambda v_{1,1} \cdots v_{1,n_1} f_1 \cdots f_m . f_1 v_{1,1} \cdots v_{1,n_1})
- (\cdots)
- (C_m \equiv \lambda v_{m,1} \cdots v_{m,n_m} f_1 \cdots f_m . f_m v_{m,1} \cdots v_{m,n_m})
基于这种类型定义的(多情况)模式函数 (f),在 Haskell 或 Clean 中定义如下:
f (C1 v1,1 ... v1,n1 ) = body1
...
f (Cm vm,1 ... vm,nm ) = bodym
该函数可转换为以下 λ 表达式(当然,函数体也需要进行编码):
f ≡λx . x
(λv1,1 ... v1,n1 . body1)
...
(λvm,1 ... vm,nm . bodym)
1.2 Church 编码与 Scott 编码的转换
Church 编码和 Scott 编码的数字可以相互转换。由于折叠操作会用函数替
超级会员免费看
订阅专栏 解锁全文
68

被折叠的 条评论
为什么被折叠?



