Введение
В компьютерном программировании, особенно в функциональном программировании и теории типов, алгебраический тип данных (ADT) — это вид составного типа, то есть тип, формируемый путем объединения других типов. Два распространенных класса алгебраических типов — это типы-произведения (то есть кортежи и записи) и типы-суммы (то есть типы с метками или непересекающиеся объединения, копроизведения или варианты). Значения типа-произведения обычно содержат несколько значений, называемых полями. Все значения этого типа имеют одинаковую комбинацию типов полей. Множество всех возможных значений типа-произведения является теоретико-множественным произведением, то есть декартовым произведением множеств всех возможных значений его типов полей. Значения типа-суммы обычно группируются в несколько классов, называемых вариантами. Значение типа-варианта обычно создается с помощью квазифункциональной сущности, называемой конструктором. Каждый вариант имеет свой конструктор, который принимает определенное количество аргументов определенных типов. Множество всех возможных значений типа-суммы является теоретико-множественным объединением, то есть непересекающимся объединением множеств всех возможных значений его вариантов. Перечисляемые типы — это особый случай типов-сумм, в которых конструкторы не принимают аргументов, поскольку для каждого конструктора определено ровно одно значение. Значения алгебраических типов анализируются с помощью сопоставления с образцом, которое идентифицирует значение по его конструктору или именам полей и извлекает содержащиеся в нем данные.
In computer programming, especially functional programming and type theory, an algebraic data type (ADT) is a kind of composite type, i. e., a type formed by combining other types. Two common classes of algebraic types are product types (i. e., tuples and records) and sum types (i. e., tagged or disjoint unions, coproduct types or variant types). The values of a product type typically contain several values, called fields. All values of that type have the same combination of field types. The set of all possible values of a product type is the set theoretic product, i. e., the Cartesian product, of the sets of all possible values of its field types. The values of a sum type are typically grouped into several classes, called variants. A value of a variant type is usually created with a quasi functional entity called a constructor. Each variant has its own constructor, which takes a specified number of arguments with specified types. The set of all possible values of a sum type is the set theoretic sum, i. e., the disjoint union, of the sets of all possible values of its variants. Enumerated types are a special case of sum types in which the constructors take no arguments, as exactly one value is defined for each constructor. Values of algebraic types are analyzed with pattern matching, which identifies a value by its constructor or field names and extracts the data it contains.
История
Алгебраические типы данных были введены в Hope, небольшом функциональном языке программирования, разработанном в 1970-х годах в Эдинбургском университете.