代數數據類型
此條目可參照英語維基百科相應條目來擴充。 (2023年2月17日) |
此條目翻譯自其他語言維基百科,需要相關領域的編者協助校對翻譯。 |
代數數據類型(英語:Algebraic data type,縮寫:ADT)是一種複合類型,指由其他資料類型組合而成的類型,在電腦編程中,尤其是函數式編程和類型論中應用。
兩類常見的代數類型是積類型(即元組和記錄)與和類型(即標籤聯合) 。[1]
一個積類型的值通常包含多個值,即字段。該類型的所有值都有相同的字段類型組合。一個積類型的所有可能值的集合是其字段類型的所有可能值的集合的集合論乘積,即笛卡爾積。
一個和類型的值通常被分組為多個類別,即變體。一個變體類型的值通常是用一個叫做構造器的准功能實體創建的。每個變體都有自己的構造函數,它接受指定數量的參數,並具有指定的類型。和類型的所有可能值的集合是其變體的所有可能值的集合的集合論之和,即不相連的聯合。枚舉類型是和類型的一個特例,其中構造函數不需要參數,因為每個構造函數隻定義一個值。
代數類型的值是用模式匹配來分析的,它通過構造函數或字段名來識別一個值,並提取它所包含的數據。
支持代數數據類型的編程語言
許多編程語言將代數數據類型作為一等類型概念,包括:
- 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).