主要观点:“代数数据类型”这一编程语言特性名称由来有两主要事件,即 Hope 和 Miranda,其名称源于通用代数,而非常见的“乘积之和”解释。还介绍了 Clear、CLU 等语言中与代数数据类型相关的内容。
关键信息:
- Hope(1980):起初称为“数据类型”,由 Rod Burstall 等人提出,有具体数据类型声明语法,如
data num == 0 ++ succ(num)
等,模式匹配在多子句函数声明或多子句 lambda 中进行,未提及case
表达式,ML 受其启发采用数据类型。 - Miranda(1985):1985 年首次提及“代数数据类型”,数据构造器在 Miranda 中是柯里化的,且具有惰性特征,还可对数据类型定义进行商化(quotienting)操作。
- Sums of products?:“代数数据类型”中“代数”的另一种民间解释为“乘积之和”,虽常见但未找到确切来源,仅在后期一篇论文中略有提及。
- Clear(1979):自由代数(初始代数)是通用代数和范畴论中的概念,在编程语言理论中有悠久历史,Clear 语言由 Rod Burstall 和 Joseph Goguen 等创建,通过理论(theory)和代数(algebra)来定义各种结构,如单子(monoid)、布尔值(boolean)、自然数(natural number)等,“数据理论”(data theory)通过添加
data
关键字来指定初始代数,且理论可扩展。 - CLU(1977):是 MIT 的 Barbara Liskov 及其学生创建的编程语言,有标记联合类型(“oneof 类型”),通过
make_
前缀构造值,tagcase
用于解构值,主要缺失递归类型定义,可通过多个簇(类)间接实现。Burstall 的论文提及 CLU,但难以确定其对其他语言演化的影响。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。