代数数据类型
此条目可参照英语维基百科相应条目来扩充。 (2023年2月17日) |
此条目翻译自其他语言维基百科,需要相关领域的编者协助校对翻译。 |
代数数据类型(英语:Algebraic data type,缩写:ADT)是一种复合类型,指由其他资料类型组合而成的类型,在电脑编程中,尤其是函数式编程和类型论中应用。
两类常见的代数类型是积类型(即元组和记录)与和类型(即标签联合) 。[1]
一个积类型的值通常包含多个值,即字段。该类型的所有值都有相同的字段类型组合。一个积类型的所有可能值的集合是其字段类型的所有可能值的集合的集合论乘积,即笛卡尔积。
一个和类型的值通常被分组为多个类别,即变体。一个变体类型的值通常是用一个叫做构造器的准功能实体创建的。每个变体都有自己的构造函数,它接受指定数量的参数,并具有指定的类型。和类型的所有可能值的集合是其变体的所有可能值的集合的集合论之和,即不相连的联合。枚举类型是和类型的一个特例,其中构造函数不需要参数,因为每个构造函数只定义一个值。
代数类型的值是用模式匹配来分析的,它通过构造函数或字段名来识别一个值,并提取它所包含的数据。
代数数据类型被引入到Hope中。Hope是一个20世纪70年代在爱丁堡大学开发的小型函数式编程语言。[2]
支持代数数据类型的编程语言
许多编程语言将代数数据类型作为一等类型概念,包括:
- Ceylon
- Clean
- Coq[3]
- C++[4]
- Elm
- Flow[5]
- F#
- F*
- Free Pascal
- Haskell[6]
- Haxe[7]
- Hope
- Idris
- Java 15[8]
- Kotlin[9]
- Limbo
- Language Of Temporal Ordering Specification (LOTOS)
- Mercury
- Miranda
- Nemerle
- Nim
- OCaml
- Opa
- OpenCog
- Perl
- PureScript
- Racket
- Reason[10]
- Rust[11]
- Scala
- Standard ML
- Swift
- Tom
- TypeScript
- Visual Prolog
参考文献
- ^ Records and variants- OCaml manual section 1.4 互联网档案馆的存档,存档日期2020-04-28.
- ^ Paul Hudak; John Hughes; Simon Peyton Jones; Philip Wadler. A history of Haskell: being lazy with class. Proceedings of the third ACM SIGPLAN conference on History of programming languages.
Presentations included Rod Burstall, Dave MacQueen, and Don Sannella on Hope, the language that introduced algebraic data types
- ^ Calculus of Inductive Constructions (页面存档备份,存于互联网档案馆), and basic standard libraries :
Datatypes
(页面存档备份,存于互联网档案馆) andLogic
(页面存档备份,存于互联网档案馆). - ^ CppCon 2016: Ben Deane "Using Types Effectively". (原始内容存档于2021-12-12) –通过www.youtube.com.
- ^ Flow (页面存档备份,存于互联网档案馆)
- ^ Algebraic Data Types in Haskell. Serokell. [2023-01-03]. (原始内容存档于2023-02-15).
- ^ Enum Instance. Haxe - The Cross-platform Toolkit. [2023-01-03]. (原始内容存档于2023-01-28).
- ^ JEP 360: Sealed Classes (Preview). OpenJDK. [2023-01-03]. (原始内容存档于2022-05-23).
- ^ Sealed Classes - Kotlin Programming Language. Kotlin. [2023-01-03]. (原始内容存档于2023-02-08).
- ^ Reason · Reason lets you write simple, fast and quality type safe code while leveraging both the JavaScript & OCaml ecosystems.. reasonml.github.io. [2023-01-03]. (原始内容存档于2022-05-06).
- ^ Enums and Pattern Matching - The Rust Programming Language. doc.rust-lang.org. [31 August 2021]. (原始内容存档于2023-01-18).