Todos sabemos que los datos que maneja Prolog son los t�rminos. Sin embargo, podemos construir otros tipos de datos a partir de estos. De hecho, algunos estan predefinidos para mayor gloria del programador, son el caso de las listas y las cadenas de caracteres.
En cualquier caso, el lector debe asumir que Prolog no es un lenguaje tipado, puesto que no existen declaraciones expl�citas de tipo tal y como ocurre en los lenguajes imperativos. El hecho de que no existan dichas declaraciones se debe sencillamente a que no hacen falta.
�Registros
Los registros son agrupaciones ordenadas de datos que en Prolog podemos escribir como t�rminos que almacenan cada dato en un argumento. Por ejemplo, supongamos que queremos un registro para representar los datos personales de la gente:
persona('Eva','Fina','Y Segura',15) persona('Fulanito','De Tal','Y Tal',32)
Mediante el t�rmino persona/4 representamos a un individuo. El primer argumento es el nombre, el segundo y tercero son los apellidos y el cuarto es la edad.
Puesto que los t�rminos son anidables podemos crear registros complejos:
persona('Menganito',edad(32),direccion('Leganitos',13,'Madrid'))
��rboles
Puesto que los t�rminos pueden ser recursivos es f�cil crear estructuras de datos recurrentes. Como ejemplo, veamos como definir �rboles binarios. Para ello representamos el �rbol vac�o mediante una constante, por ejemplo, empty/0, y un nodo cualquiera puede ser representado mediante el t�rmino tree/3. El primer argumento representa un dato cualquiera asociado al nodo. El segundo argumento representa la rama izquierda, y el tercer argumento la correspondiente rama derecha. Son ejemplos de �rboles:
empty tree(dato1,empty,empty) tree(dato1,tree(dato2,empty,empty),tree(dato3,empty,empty)) tree(dato4,empty,tree(dato5,tree(dato6,empty,empty),empty))
�Listas
Las listas en Prolog podrian definirse del mismo modo que los �rboles puesto que los t�rminos se pueden anidar todas las veces que sea necesario. Por ejemplo, la lista de n�meros del uno al cinco se puede representar as�:
lista(1,lista(2,lista(3,lista(4,lista(5,vacio)))))
Afortunadamente, las listas est�n predefinidas en el lenguaje para una mayor comodidad. De modo que la lista anterior la podemos escribir as�:
[1, 2, 3, 4, 5]
Esta es la forma de escribir las listas definiendo todos los elementos, pero podemos manipular las listas distinguiendo cabeza y resto: [C|R]. Donde la variable C representa la cabeza, y R el resto. Por ejemplo:
L = [1, 2, 3, 4, 5], M = [0|L].
La lista M ser�a equivalente a [0,1,2,3,4,5] . Es importante no confundir los t�rminos [C|R] y [C,R]. La diferencia es muy sutil:
L = [1, 2, 3, 4, 5], M = [0,L].
El resultado ser�a M = [0,[1,2,3,4,5]], que es una lista de dos elementos.
Naturalmente, existe la lista vac�a, que se representa como []. Adem�s resulta conveniente tener en cuenta que:
- Existen bibliotecas para hacer cosas m�s complicadas con las listas, como concatenar, aplanar, etc.
- Los elementos de las listas son t�rminos y pueden ser heterog�neos. Por ejemplo: [1,p(a),[a,b],f(g(h))].
- Las listas tambi�n son t�rminos, solamente las escribimos de una manera m�s c�moda. As�, la lista [1,a,2] es en realidad el t�rmino '.'(1,'.'(a,'.'(2,[]))).
�Cadenas de caracteres
Las cadenas de caracteres son en Prolog listas de c�digos ASCII. Afortunadamente se pueden escribir de una manera c�moda poniendo los caracteres entre comillas dobles. Por ejemplo, la expresi�n "ABC" es en realidad la lista [65,66,67]. As�, podemos tratar las cadenas de caracteres como cadenas o como listas seg�n nos interese. Naturalmente, todo el c�digo que nos sirve para listas nos sirve para cadenas. Por ejemplo, el predicado que concatena dos listas t�mbien sirve para concatenar dos cadenas de texto (� no es genial ?).
�Constantes
Como ya es sabido, las constantes en Prolog son t�rminos cero-arios (�tomos). A pesar de su simpleza, pueden ser muy �tiles para representar informaci�n ya que pueden contener cualquier caracter. Se utilizan, por ejemplo, para representar nombres de ficheros. Recuerde que las constantes num�ricas tambi�n son t�rminos cero-arios (pero no son �tomos).
� Conversi�n entre n�meros, �tomos y cadenas de caracteres
Existe cierta correspondencia entre estos elementos. Tanto los n�meros como los �tomos se pueden convertir a cadena de caracteres mediante los predicados number_codes/2 y atom_codes/2 respectivamente. Utilizando las cadenas de caracteres como elemento intermedio, es posible convertir de �tomos a n�meros y viceversa: atom_codes(Atomo,Aux),number_codes(Numero,Aux). Observe que dichos predicados son reversibles.
� Copyright 2000-2001
Angel Fern�ndez Pineda.