En esta lecci�n explicaremos como reconocer los diferentes elementos que componen un programa fuente en Prolog. Como observar� en breve, Prolog carece de declaraciones en el sentido imperativo: secciones, declaraciones de tipo, declaraciones de variable, declaraciones de procedimientos, etc.
Despu�s de leer est� secci�n deber ser capaz de distinguir variables y t�rminos l�gicos entre la "mara�a" de caracteres que hay en un programa fuente.
�Comentarios
Los comentarios en Prolog se escriben comenzando la l�nea con un s�mbolo de porcentaje. Ejemplo:
% Hola, esto es un comentario. % Y esto tambi�n.
�Variables l�gicas
Las v�riables en Prolog no son variables en el sentido habitual, por eso las llamamos variables l�gicas. Se escriben como una secuencia de caracteres alfab�ticos comenzando siempre por may�scula o subrayado. Ejemplos de variables:
Variable _Hola _
Pero no son variables:
variable $Hola p__
El hecho de que los nombres de variables comienzen por may�scula (o subrayado) evita la necesidad de declarar previamente y de manera expl�cita las variables, tal y como ocurre en otros lenguajes.
�La variable an�nima
S�, s�, existen variables sin nombre, y todas ellas se representan mediante el s�mbolo de subrayado _. Pero cuidado, aunque todas las variables an�nimas se escriben igual, son todas distintas. Es decir, mientras que dos apariciones de la secuencia de caracteres Hola se refieren a la misma variable, dos apariciones de la secuencia _ se refieren a variables distintas.
�T�rminos
Los t�rminos son el �nico elemento del lenguaje, es decir, los datos son t�rminos, el c�digo son t�rminos, incluso el propio programa es un t�rmino. No obstante, es habitual, llamar t�rmino solamente a los datos que maneja un programa.
Un t�rmino se compone de un functor seguido de cero a N argumentos entre par�ntesis y separados por comas. Los n�meros enteros o decimales sin restricciones de tama�o tambi�n son t�rminos.
Un functor (tambi�n denominado �tomo) puede ser:
- Una sucesi�n de caracteres alfanum�ricos comenzando por una letra min�scula.
- Un s�mbolo de puntuaci�n o secuencia de estos. Las secuencias permitidas varian de un entorno de desarrollo a otro.
- Una sucesi�n cualquiera de caracteres encerrada entre comillas simples.
Veamos algunos ejemplos de functores:
functor f384p12 'esto es un unico functor, eh!!' '_functor' $ +
No son functores v�lidos:
_functor Functor
Los argumentos de un t�rmino pueden ser:
- otro t�rmino.
- una v�riable l�gica.
La mejor forma de aprender a escribir t�rminos es mirando algunos ejemplos:
termino_cero_ario 1237878837385345.187823787872344434 t(1) 'mi functor'(17,hola,'otro termino') f(Variable) muchos_argumentos(_,_,_,Variable,232,f,g,a) terminos_anidados(f(g), h(i,j(7)), p(a(b)), j(1,3,2,_)) +(3,4) $(a,b) @(12)
�Operadores
Algunos functores pueden estar declarados como operadores, bien de manera predefinida, o bien por el programador. Los operadores simplemente sirven para escribir t�rminos unarios o binarios de una manera m�s c�moda. Por ejemplo, un functor definido como operador infijo es la suma (+). As�, la expresi�n a+b es perfectamente v�lida, aunque en realidad no es m�s que el t�rmino +(a,b).
Los operadores binarios infijos nos permiten escribir el functor entre los dos argumentos y eliminar los par�ntesis.
Los operadores tienen asociada una prioridad. Por ejemplo, la expresi�n a+b*c es en realidad el t�rmino +(a,*(b,c)). Esto es as� porque el operador producto (*) tiene m�s prioridad que el operador suma (+). Si no fuese as�, se tratar�a del t�rmino *(+(a,b),c).
Los operadores tambi�n pueden ser unarios y prefijos, lo que nos evita escribir los par�ntesis del argumento. Por ejemplo, la expresi�n -5 es en realidad el t�rmino -(5).
�Culturilla
- Es posible escribir t�rminos sin argumentos, en tal caso no se escriben los par�ntesis (tal como muestra el ejemplo).
- Un t�rmino con N argumentos se dice que es N-ario, o que tiene aridad N.
- Un t�rmino que no contiene variables libres se dice que es cerrado o ground (en ingl�s).
- Para referirnos a un t�rmino con el functor f y A argumentos usamos la notaci�n f/A. Por ejemplo: p(a,b), p(1,f(j)), p(A,_) son todos ejemplos del t�rmino p/2.
- Dos t�rminos con el mismo functor pero distinta aridad son distintos, por ejemplo p(1) y p(1,2).
- Los n�meros en Prolog no tienen l�mite de precisi�n o rango. Estan l�mitados �nicamente por la memoria disponible.