Vamos a contar con muchos tipos de datos, algunos conocidos y otros nuevos. En particular, tenemos:
• : Números enteros
• : Números reales
• : Tipo booleano, verdadero, falso e indefinido.
• : Caracter, denota una letra del alfabeto
Cada uno de estos tipos van a tener sus operaciones para poder trabajar con ellos, y la mayoría ya los conocemos, de hecho, pero eso lo veremos en profundidad mas adelante.
Los tipos numéricos cuentan con las operaciones algebraicas ya conocidas. Podemos sumarlas, restarlas, multiplicarlas, dividirlas, tomar valor absoluto, evaluar modulo, entre muchas otras. También podemos utilizar sumatorias y productorias, tanto con los enteros como con los reales.
Los valores de tipo se comportan siguiendo la lógica trivaluada. Operaciones como el y lógico, , o la están mas que disponibles, entre otras.
Por ultimo, los caracteres son las letras del alfabeto, tanto mayúsculas como minúsculas. Nos van a ser útiles para la manipulación de textos.
Datos compuestos
Numerados
Los tipos enumerados, por otro lado, son un conjunto de constantes que construimos nosotros. Como tal no hay tipos enumerados preexistentes, los vamos inventando a medida que los necesitemos. Existe, para tener en cuenta, la convención de escribir sus valores en mayúsculas, ya que son datos inmutables y que no van a cambiar, así las diferenciamos de otras variables. Para definir el tipo Día, por ejemplo, escribiríamos:
enum Día{LUN, MAR, MIER, JUE, VIE, SAB, DOM}
Equivalentemente a los , los tipo enumerados poseen funciones de orden y comparación. Por ejemplo, podemos consultar que día es el que está en la posición 2, o en que posición está determinado día. Noten que el índice de posiciones empieza en 0.
ord(LUN) = 0
Día(2) = MIE
MAR < JUE = True
Vectores
Continuando con los tipos de datos, tenemos la , o , o . Le digan como le digan, en definitiva, se trata de un ”vector” de datos, que pueden ser distintos o no. Algo importante, es que las tuplas tienen un tamaño fijo: no podemos agregar ni quitar elementos. Se definen , donde es el tipo de en la posición . Por ejemplo, define el conjunto de vectores de dos dimensiones de los enteros, es decir los , donde tanto e son enteros. También podemos combinar tipos, como , es decir, vectores de la forma (n; a), donde n es un entero y a algún caracter de los que vimos antes.
Podemos acceder a cualquier posición del vector utilizando la notación , donde , en caso contrario se indefine.
Secuencias
Las secuencias son una colección de valores de un mismo tipo, que pueden estar repetidos o no, y que tienen un cierto orden. Se definen , donde es el tipo de los datos. El tamaño de las secuencias, a diferencia de las tuplas, puede variar, o incluso pueden estar vacías. A su vez, como es un tipo de dato en si mismo, podríamos definir una secuencia de secuencias de tipo , es decir .
Por ejemplo, veamos una :
• es una secuencia de enteros
• es otra secuencia de enteros, ya que tiene otro orden
• es una secuencia de enteros mal definida, ya que uno de sus elementos es de otro tipo
• es una secuencia de enteros que está vacía
Tenemos un montón de funciones muy interesantes con las secuencias, vamos a verlas una a una. Para empezar, tenemos una operación que nos indica la longitud de la secuencia. Lo notamos , donde a es la secuencia a evaluar. También podemos escribir , que es considerablemente mas corto. Unos ejemplos de esto:
Por otro lado, tenemos la indexación, que dado un índice de la secuencia nos devuelve el valor en esa posición. Requerimos que el índice dado para la lista cumpla , ya que en otros casos será indefinido. Es semejante a lo que hacíamos con los vectores, solo cambia la notación, pero es algo a tener en cuenta.
También podemos evaluar igualdad entre secuencias, la cual se cumple si y solo si tienen la misma cantidad de elementos, y para cualquier índice dado, el elemento en la primera lista es igual al de la segunda. Por ejemplo:
Luego tenemos las operaciones de (o cabeza) y (o cola). La operación , dada una lista nos devuelve el primer elemento de la misma, pero es requisito que la lista tenga por lo menos un elemento. Por otro lado, la función , dada una lista nos devuelve la lista sin el primer elemento, es decir, habiéndole sacado la cabeza.
Para agregar elementos a una lista tenemos la operación de (o añadir al principio), que dado un elemento y una lista , crea una secuencia igual a pero ”moviendo” todos sus elementos una posición y dejando en la primera a .
Quizás queremos combinar dos secuencias en una sola, y para eso tenemos la operación de la concatenación. La notamos o , donde y son dos secuencias cualesquiera. Lo que hace esta operación es devolvernos una lista con los elementos de , seguidos de los de . Las dos listas deben ser del mismo tipo.
También podemos "cortar" secuencias, con la operación de (o subsecuencia). Esta operación toma una lista , y dos números enteros y , donde se cumple que , y cuando no se indefine. Esta operación devuelve una sublista de en las posiciones entre (inclusive) y (exclusive). Notemos que cuando , el resultado es la secuencia vacía.
Para terminar tenemos la operación de reemplazar un valor en alguna posición de una secuencia. Es decir, la operación (o modifica en). Dada una lista , una posición , y un valor del tipo de los elementos de la secuencia, podemos construir la operación , donde requerimos que , ya que en caso contrario se indefiniría.
Por ultimo, las matrices. Consisten en secuencias de secuencias, donde todas las secuencias internas tienen exactamente el mismo tamaño, y no deben ser vacías. Es decir, una matriz de números enteros se define como , aunque también aceptamos el reemplazo sintáctico de .
En si mismo, las matrices no tienen operaciones básicas, pero, al tratarse finalmente de secuencias, podemos construir las nuestras.
Conjuntos
Al igual que en las secuencias, es como es un tipo en si mismo, es posible crear conjuntos de conjuntos, o incluso conjuntos de secuencias, o secuencias de conjuntos. Algunos ejemplos para empezar pueden ser:
es un conjunto de
es un conjunto de igual al anterior, porque no importa el orden o los repetidos
es un conjunto vacío de cualquier tipo.
Las operaciones sobre conjuntos son las mismas que las de los conjuntos matemáticos, es decir, pertenencia, tamaño, unión, intersección y resta.