Tipo de datos algebraico

Tipo de datos algebraico

Tipo de datos algebraico

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.

  1. El árbol vacío es un árbol y es representado con la constante AVacio.
  2. Si t1 y t2 son árboles, y x es un elemento de T, entonces Nodo(t1,x,t2) es un árbol.
  3. 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)

Corrección de programas

A cada tipo de datos algebraico corresponde el orden bien fundamentado de subtérminos y un esquema de inducción estructural sobre la base de la definición del tipo. En el caso de los árboles éstos son los siguientes:

 t_1 < Nodo(t_1,n,t_2) t_2 < Nodo(t_1,n,t_2)

\frac{P(AVacio) \wedge (\forall i,n,d:i,d\in Arbol(T): P(i) \wedge P(d) \Rightarrow P(Nodo(i,n,d)))}{(\forall x:x\in Arbol(T):P(x))}

Para demostrar la terminación de la función niveles aplicando este esquema de inducción estructural, se tiene que demostrar, utilizando las reglas semánticas del lenguaje, que la expresión (niveles AVacio) termina y que si (niveles i) y (niveles d) terminan entonces (niveles (Nodo (i, n, d)) termina también.

La llamada por patrones es una operación compleja que puede definirse con ayuda de dos primitivas, El operador is permite identificar el caso particular de una definición y la definición estructurada de variables permite obtener los componentes de un caso ya identificado:

En el ejemplo de árboles, el predicado e is AVacio es cierto cuando el árbol e es efectivamente un árbol vacío y e is Nodo es cierto cuando e es un nodo. Una definición del tipo let Nodo (u, x, v) = e ..., que sólo tiene sentido cuando e is Nodo es cierto, permite asociar a las variables u, x, v los componentes del nodo.

Enlaces externos


Wikimedia foundation. 2010.

Игры ⚽ Нужна курсовая?

Mira otros diccionarios:

  • Tipo de dato algebraico — 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… …   Wikipedia Español

  • Tipo de datos algebraico — 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… …   Enciclopedia Universal

  • Tipo de dato — Informático es un atributo de una parte de los datos que indica al ordenador (y/o al programador) algo sobre la clase de datos sobre los que se va a procesar. Esto incluye imponer restricciones en los datos, como qué valores pueden tomar y qué… …   Wikipedia Español

  • GAP (sistema algebraico computacional) — GAP Desarrollador The GAP group www.gap system.org Información general Última versión estable 4.4.12 diciembre de 2008 …   Wikipedia Español

  • Inducción estructural — La inducción estructurada es un método de demostración utilizado en Lógica matemática, teoría de los grafos, Computación y en otras áreas. Se trata de una generalización de la inducción matemática. Dado un conjunto C con un orden parcial bien… …   Wikipedia Español

  • Common Lisp — El Common Lisp, puede ser implementado por medio de JAVA. CLISP comúnmente abreviado como TL, es un dialecto del lenguaje de programación Lisp, publicado en el documento estándar ANSI INCITS 226 1994 (R2004) del ANSI, (antes X3.226 1994… …   Wikipedia Español

  • Lenguaje de programación Miranda — Saltar a navegación, búsqueda Miranda fue desarrollado entre los años 1985 y 1986 por David Turner. Se trata de un lenguaje de programación funcional sucesor de SASL y KRC. El principal objetivo de este lenguaje era el desarrollar una versión… …   Wikipedia Español

  • Miranda (lenguaje de programación) — Miranda fue desarrollado entre los años 1985 y 1986 por David Turner. Se trata de un lenguaje de programación funcional sucesor de SASL y KRC. El principal objetivo de este lenguaje era el desarrollar una versión comercial de un lenguaje… …   Wikipedia Español

  • Compilador — «Compilación» redirige aquí. Para otras acepciones, véase recopilación. Diagrama a bloques de la operación de un buen compilador. Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro… …   Wikipedia Español

  • Historia de la matemática — Página del Compendio de cálculo por el método de completado y balanceado de Muhammad ibn Mūsā al Khwārizmī (820 d.C.) La historia de las matemáticas es el área de estudio que abarca las investigaciones sobre los orígenes de los descubrimi …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”