| dbpprop:abstract
|
- In computer programming, an algebraic data type (sometimes also called a variant type) is a datatype each of whose values is data from other datatypes wrapped in one of the constructors of the datatype. Any wrapped datum is an argument to the constructor. In contrast to other datatypes, the constructor is not executed and the only way to operate on the data is to unwrap the constructor using pattern matching. The most common algebraic data type is a list with two constructors: Nil or for an empty list, and Cons (an abbreviation of constructor), ::, or : for the combination of a new element with a shorter list (for example or 1). Special cases of algebraic types are product types i.e. records (only one constructor), sum types or tagged unions (many constructors with a single argument) and enumerated types (many constructors with no arguments). Algebraic types are one kind of composite type (i.e. a type formed by combining other types). An algebraic data type may also be an abstract data type (ADT) if it is exported from a module without its constructors. Values of such a type can only be manipulated using functions defined in the same module as the type itself. In set theory the equivalent of an algebraic data type is a disjoint union – a set whose elements are pairs consisting of a tag (equivalent to a constructor) and an object of a type corresponding to the tag (equivalent to the constructor arguments).
- En matemáticas discretas es usual introducir definiciones de estructuras recursivas dando los casos de definición y un axioma de clausura indicando que ninguna otra cosa forma parte de lo definido. Por ejemplo, los árboles con información en los nodos pueden definirse como sigue: Sea T un conjunto. Los árboles con información en los nodos son todos los valores que se pueden construir con las reglas siguientes. El árbol vacío es un árbol y es representado con la constante AVacio. Si <math>t_1</math> y <math>t_2</math> son árboles, y x es un elemento de T, entonces Nodo(<math>t_1</math>,x,<math>t_2</math>) es un árbol. Los árboles son únicamente los valores que se construyen utilizando las reglas 1 y 2. La construcción correspondiente en los lenguajes de programación se llama Tipo de datos algebraico. Sus reglas de tipo polimórficas fueron introducidas por Robin Milner junto con la definición del lenguaje Standard ML y han sido adoptadas desde entonces en diversos lenguajes de programación, sobre todo en los lenguajes de programación funcionales. Por ejemplo, la definición del tipo árbol binario con información en los nodos de tipo T se escribe en Ocaml como sigue: type 'T Arbol = AVacio | Nodo of ('T Arbol * 'T * 'T Arbol) y en sintaxis de Haskell: data Arbol T = AVacio | Nodo (Arbol T) T (Arbol T) Los constructores del tipo Árbol son AVacio y Nodo los cuales, al recibir los argumentos necesarios producen un valor del tipo árbol. Por ejemplo, en Ocaml, AVacio es un árbol al igual que Nodo (AVacio,5,AVacio). Las operaciones sobre los tipos recursivos se generalmente se escriben utilizando la construcción de llamada por patrones. Por ejemplo, en Haskell, el número de niveles de un árbol de define como: niveles :: Arbol T -> Int niveles AVacio = 0 niveles (Nodo i n d) = 1 + max (niveles i) (niveles d) en Standard ML la misma función se escribe fun niveles AVacio = 0 | niveles Nodo(i,n,d) = 1 + max (niveles i) (niveles d)
- Un type algébrique de données est un type de données dont chacune des valeurs est une donnée d'un autre type enveloppée dans un des constructeurs du type. Toutes les données enveloppées sont des arguments du constructeur. Par contraste aux autres types de données, le constructeur n'est pas exécuté et la seule manière d'opérer sur les données est d'enlever le constructeur en utilisant le filtrage par motif. Le type algébrique de données le plus répandu est une liste avec deux constructeurs : Nil et pour une liste vide, et Cons (une abréviation pour constructor), ::, et : pour la combinaison d'un élément avec une liste plus courte (par exemple et 1). Des cas spéciaux de types algébriques sont des types produit (un seul constructeur) et les types énumération (plusieurs constructeurs sans argument). Les types algébriques sont une forme de type composite; c’est-à-dire un type formé en combinant plusieurs autres types. Un type algébrique de donnée peut être aussi un type abstrait de données s'il est exporté à partir d'un module sans ses constructeurs. Les valeurs d'un tel type peuvent être manipulées seulement avec des fonctions définies dans le même module que le type lui-même. En théorie des ensembles l'équivalent d'un type algébrique de données est la réunion disjointe (ou somme ensembliste), une réunion dont les éléments communs sont en quelque sorte dupliqués. Formellement, les éléments dupliqués sont distingués par l’adjonction d’un marqueur (l'équivalent d'un constructeur) identifiant l’ensemble d’origine de l’élément. La construction est généralisée en rendant obligatoire le marqueur pour tous les éléments, même ceux dont le type pourrait être laissé implicite.
- 代数的データ型(英: Algebraic data type)とはプログラミングにおけるデータ型の一種で、他のデータ型を当該代数的データ型のコンストラクタで包んだデータを値とする。この包まれたデータはコンストラクタの引数である。他のデータ型と異なり、コンストラクタが実行されることはなく、データを操作するにはパターンマッチを使ってコンストラクタからデータを抜き出さねばならない。 最も典型的な代数的データ型は2つのコンストラクタからなるリストである。1つは空のリストを表す Nil または 、もう1つは Cons、::、: などと表記されるコンストラクタで、短いリストに新たな要素を組み合わせるのに使われる(例えば (Cons 1 ') あるいは 1:[2,3,4])。 代数的データ型の特殊な例として、プロダクト型(1つのコンストラクタだけを持つ)と列挙型(引数なしの多くのコンストラクタを持つ)がある。代数データ型は複合型(他のデータ型を組み合わせて形成される型)の一種である。 コンストラクタなしでモジュール外にエクスポートされた場合、代数的データ型は抽象データ型の一種でもある。そのような型の値の操作は、その型と同じモジュールで定義された関数を使ってのみ可能となる。 集合論において代数的データ型と等価なものとして非交和がある。この集合の各元はタグ(コンストラクタと等価)とそのタグに対応する型のオブジェクト(コンストラクタの引数と等価)で構成される。
- In de informatica is een algebraïsch datatype een datatype waarin de waarden van andere datatypen verpakt zijn met constructoren. De constructor wordt niet uitgevoerd maar deze wordt gebruikt om de data uit het datatype te halen met patroonherkenning. Algebraïsche datatypen worden voornamelijk gebruikt in functionele programmeertalen.
- Алгебраи́ческий тип да́нных — в теории программирования любой тип, значения которого являются значениями некоторых иных типов, «обёрнутыми» конструкторами алгебраического типа. Другими словами, алгебраический тип данных имеет набор конструкторов типа, каждый из которых принимает на вход значения определённых типов и возвращает значение конструируемого типа. Важное отличие конструктора типа от функции заключается в том, что конструктор не исполняется, но единственная его задача — создание значения своего типа на основе входных значений. Для работы с такими значениями используется механизм сопоставления с образцами, как наиболее эффективный способ разбора значений (но это не означает, что иные механизмы работы с значениями не применимы к алгебраическим типам данных). Самым простым алгебраическим типом данных является список. Действительно, список имеет два конструктора — конструктор пустого списка и конструктор пары, первым элементом которой является значение определённого типа, а вторым — список. Пример определения списка на языке Haskell: data List a = Nil | Cons a (List a) Так что видно, что алгебраические типы данных являются контейнерными типами — они содержат внутри себя значения других типов (или того же самого типа). То, что у списка первый конструктор не принимает на вход каких-либо параметров, не должно вводить в сомнение. Такая форма конструктора является необходимой для создания значений, которые внутри себя не содержат ничего, но являются «единичными» элементами алгебраических типов данных. Специальными разновидностями алгебраических типов данных являются декартовы типы (они имеют только один конструктор) и перечисления (у них все конструкторы аргументов не имеют вовсе, хотя самих конструкторов может быть несколько). Так простейшим, но очень широко используемым перечислением является логический тип. Код на Haskell: data Bool = False | True Также алгебраический тип данных может быть абстрактным, если такой тип определён в некотором модуле, из которого не экспортируются конструкторы соответствующего типа, а доступ к значениям внутри алгебраического типа данных осуществляется при помощи специальных методов — селекторов. Особо стоит отметить так называемые «обобщённые алгебраические типы данных», которые реализованы в языках Haskell и ML. Остаётся отметить, что с точки зрения синтаксически-ориентированного конструирования данных алгебраическим типом данных является размеченное объединение декартовых произведений типов. Каждое слагаемое в размеченном объединении соответствует одному конструктору, а каждый конструктор в свою очередь определяет декартово произведение типов, соответствующих параметрам конструктора. Конструкторы без параметров являются пустыми произведениями. Если алгебраический тип данных является рекурсивным, всё размеченное объединение обёртывается рекурсивным типом, и каждый конструктор типа возвращает рекурсивный тип.
|