Elementos del lenguaje
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.