跳至內容

代數數據類型

維基百科,自由的百科全書

代數數據類型(英語:Algebraic data type,縮寫:ADT)是一種複合類型,指由其他資料類型組合而成的類型,在電腦編程中,尤其是函數式編程類型論中應用。

兩類常見的代數類型是積類型英語Product type(即元組和記錄)與和類型(即標籤聯合) 。[1]

一個積類型的值通常包含多個值,即字段。該類型的所有值都有相同的字段類型組合。一個積類型的所有可能值的集合是其字段類型的所有可能值的集合的集合論乘積,即笛卡爾積

一個和類型的值通常被分組為多個類別,即變體。一個變體類型的值通常是用一個叫做構造器的准功能實體創建的。每個變體都有自己的構造函數,它接受指定數量的參數,並具有指定的類型。和類型的所有可能值的集合是其變體的所有可能值的集合的集合論之和,即不相連的聯合。枚舉類型是和類型的一個特例,其中構造函數不需要參數,因為每個構造函數隻定義一個值。

代數類型的值是用模式匹配來分析的,它通過構造函數或字段名來識別一個值,並提取它所包含的數據。

代數數據類型被引入到Hope中。Hope是一個20世紀70年代在愛丁堡大學開發的小型函數式程式語言[2]

支持代數數據類型的程式語言

[編輯]

許多程式語言將代數數據類型作為一等類型概念,包括:

參考文獻

[編輯]
  1. ^ Records and variants- OCaml manual section 1.4 互聯網檔案館存檔,存檔日期2020-04-28.
  2. ^ 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 
  3. ^ Calculus of Inductive Constructions頁面存檔備份,存於互聯網檔案館), and basic standard libraries : Datatypes頁面存檔備份,存於互聯網檔案館) and Logic頁面存檔備份,存於互聯網檔案館).
  4. ^ CppCon 2016: Ben Deane "Using Types Effectively". (原始內容存檔於2021-12-12) –透過www.youtube.com. 
  5. ^ Flow頁面存檔備份,存於互聯網檔案館
  6. ^ Algebraic Data Types in Haskell. Serokell. [2023-01-03]. (原始內容存檔於2023-02-15). 
  7. ^ Enum Instance. Haxe - The Cross-platform Toolkit. [2023-01-03]. (原始內容存檔於2023-01-28). 
  8. ^ JEP 360: Sealed Classes (Preview). OpenJDK. [2023-01-03]. (原始內容存檔於2022-05-23). 
  9. ^ Sealed Classes - Kotlin Programming Language. Kotlin. [2023-01-03]. (原始內容存檔於2023-02-08). 
  10. ^ 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). 
  11. ^ Enums and Pattern Matching - The Rust Programming Language. doc.rust-lang.org. [31 August 2021]. (原始內容存檔於2023-01-18).