Sintaxis y significado de los programas
Prolog reconoce el tipo de un objeto por su sintaxis.
Al igual que en Logica de Primer Orden, los terminos en Prolog se clasifican
en tres categorias: constantes, variables y terminos compuestos.
Constantes
Prolog distingue dos tipos de constantes:
Números. Este tipo de constantes se utilizan para representar tanto números enteros como
números reales y poder realizar con ellos operaciones aritmeticas.
- La representación mas corriente de los números enteros es la notación decimal habitual
(por ejemplo 0, 1, -320, 539, etc) aunque también se pueden representar en otras
bases no decimales.
- Los números reales se pueden representar tanto en notación decimal (por ejemplo
1.0, -3.14) como en notación exponencial (por ejemplo 4.5E6, -0.12e+3, 12.0e-2). En ambos casos deberá haber siempre por lo menos un digito a cada lado del punto.
Átomos. Los átomos (no confundir con las formulas atómicas de la LPO) se utilizan para
dar nombre a objetos especificos, es decir, representan individuos concretos. Existen tres
clases principales de atomos:
- cadenas formadas por letras, digitos y el simbolo de subrayado, que deben empezar necesariamente por una letra minuscula.
Cadenas validas: f, pepe1, libro33a, libro_blanco.
Cadenas no validas: 1libro, libro-blanco, _hola, Libro.
- cualquier cadena de caracteres encerrada entre comillas simples.
Ejemplos: 'Tomas' 'Juan_Hernandez' 'Jose Lopez Lopez'.
Constantes
Prolog distingue dos tipos de constantes:
Números. Este tipo de constantes se utilizan para representar tanto números enteros como
números reales y poder realizar con ellos operaciones aritmeticas.
- La representación mas corriente de los números enteros es la notación decimal habitual
(por ejemplo 0, 1, -320, 539, etc) aunque también se pueden representar en otras
bases no decimales.
- Los números reales se pueden representar tanto en notación decimal (por ejemplo
1.0, -3.14) como en notación exponencial (por ejemplo 4.5E6, -0.12e+3, 12.0e-2). En ambos casos deberá haber siempre por lo menos un digito a cada lado del punto.
Átomos. Los átomos (no confundir con las formulas atómicas de la LPO) se utilizan para
dar nombre a objetos especificos, es decir, representan individuos concretos. Existen tres
clases principales de atomos:
- cadenas formadas por letras, digitos y el simbolo de subrayado, que deben empezar necesariamente por una letra minuscula.
Cadenas validas: f, pepe1, libro33a, libro_blanco.
Cadenas no validas: 1libro, libro-blanco, _hola, Libro.
- cualquier cadena de caracteres encerrada entre comillas simples.
Ejemplos: 'Tomas' 'Juan_Hernandez' 'Jose Lopez Lopez'.
Estos atomos son utiles cuando se necesita trabajar con constantes que
empiecen por una letra mayuscula o por un digito.
- existe además otro tipo de átomos, compuestos por combinaciones
especiales de signos, de uso menos común.
Variables
Las variables en Prolog se representan mediante cadenas formadas por
letras, dígitos y el símbolo de subrayado, pero deben necesariamente empezar
por una letra mayúscula o por un símbolo de subrayado.
Ejemplos: X, Resultado_1, Entrada, _total3, _3bis, _
Las variables que
empiezan con un símbolo de subrayado, _, se denominan variables anónimas, y se
usan cuando se necesita trabajar con variables cuyos posibles valores no
interesan. Su utilidad se describirá mas adelante al analizar la construcción
de programas y consultas.
Términos Compuestos
Los términos compuestos,
o estructuras, se construyen mediante un símbolo de función, denominado
functor, que se denota mediante un átomo, seguido, entre paréntesis, por una
serie de términos separados por comas, denominados argumentos.
Ejemplos:
fecha(1,mayo,2001), punto(X,Y), recta(punto(1,2), punto(3,5))
Nota: al escribir un término
compuesto, no puede haber ningún espacio entre el functor y el paréntesis abierto previo a los
argumentos. Por ejemplo, \punto (X,Y)" no es un termino compuesto correcto
y producirá un error de compilación.
Prolog también permite
escribir ciertos términos compuestos en forma de operadores, generalmente en notación
infija en el caso de functores de aridad 2 y en notacion prefija o postfija enel
caso de functores de aridad 1. Este es el caso de los operadores aritméticos
predefinidos de
Prolog, que se mencionaran
mas adelante, y que permiten escribir terminos compuestos de la forma X+Y o -X
en lugar de +(X,Y) o -(X). El programador tambien puede definir sus propios operadores.
Uno de los terminos
compuestos mas importantes y utiles que
ofrece Prolog son las listas,secuencias ordenadas de cero o mas elementos,
donde los elementos pueden ser cualquier tipode termino. Prolog representa las
listas teniendo en cuenta su estructura recursiva:
- la lista vacia se
representa mediante el atomo [].
- toda lista no vacia
tiene una cabeza (que seria cualquier termino) y un resto (que seria una lista),
y se representa mediante un termino compuesto de aridad 2, cuyo functor es unpunto
¢ y cuyos argumentos son, respectivamente, la cabeza y el resto de la lista.
Ejemplos: la lista
compuesta por un unico elemento, la constante a, se representa como “(a;[])".
La lista compuesta por
los elementos a; b y c se corresponde con la estructura
\¢(a;¢(b;¢(c;[])))".
Dado que la notación
anterior puede resultar incomoda a la hora de escribir listas complicadas, Prolog
admite también una notación más sencilla que consiste en enumerar entre
corchetes todos los elementos de la lista, separados por comas. Con esta notación,
las dos listas del ejemplo anterior se representaran, respectivamente, como [a]
y [a; b; c]. Prolog también dispone de otra notación para las listas, que
consiste en representar la lista con cabeza X y resto Y mediante el termino [X Y
]. Esta última notación es fundamental
para poder separar la cabeza del resto de una lista. Su utilidad en la practica
se vera en las clases de problemas.
Estructuras.
Son objetos que tienen varios componentes.
Ejemplo: fecha( 20, agosto, 1992)
fecha recibe el nombre de functor; En este caso todos sus componentes son constantes
pero pueden ser variables ó incluso estructuras. Aunque las estructuras tienen varios
componentes, en los programas Prolog se tratan como objetos únicos. Es decir, en
Prolog, todos los objetos son términos.
Ejemplo: agosto y fecha( 20, agosto, 1992)
son ambos términos.
Todos los objetos estructurados se pueden interpretar como árboles donde el functor es la
raíz del árbol y sus componentes son las hojas del árbol. Si un componente es a su vez
una estructura, entonces será un subárbol del árbol inicial.
Ejemplo. Representación de objetos geométricos simples mediante objetos
estructurados en Prolog:
a). Un punto en un espacio de dos dimensiones se puede definir con dos coordenadas.
b). Un segmento de línea con dos puntos.
c). Un triángulo con tres puntos.
si escogemos como functores a : punto, línea y triángulo; la figura siguiente:
se puede representar con los siguientes términos de Prolog :
P1 = punto(1,1)
P2 = punto(2,3)
S = línea( P1, P2) = línea( punto(1,1), punto(2,3) )
T = triangulo( punto(4,2), punto(6,4), punto(7,1) )
Un functor se define con dos cosas :
1). El nombre.
2). Su aridad (número de argumentos).
Ejercicio. Sugiera una representación para rectángulos, cuadrados y círculos como
objetos Prolog estructurados. Escriba algunos ejemplos que representen objetos físicos
concretos utilizando la representación que sugirió.
referencias
http://arantxa.ii.uam.es/~dcamacho/logica/recursos/3848.0.prolog.pdf
http://www.slideshare.net/njrr/el-lenguaje-de-programacin-prolog-jaume-i-castelln
http://www.slideshare.net/njrr/el-lenguaje-de-programacin-prolog-jaume-i-castelln
No hay comentarios:
Publicar un comentario