Prolog
Curso 2004-2005
Departamento de Electrónica, Sistemas Informáticos y Automática Universidad de Huelva
Tema 2: Aritmética, datos y estructuras en Prolog
Programación Declarativa
Tema 2: Aritmética, datos y estructuras en Prolog
Aritmética
•Operadores aritméticos •Operadores relacionales •Operadores de igualdad •Funciones
Tipos de Datos
•Estructuras•Árboles •Listas •Matrices •Grafos
Departamento de Electrónica, Sistemas Informáticos y Automática Universidad de Huelva
Pág. 2
Curso 2004-2005
Programación Declarativa
Tema 2: Aritmética, datos y estructuras en Prolog
Aritmética
En Prolog vamos disponer de una serie de operadores relacionales y aritméticos que nos permitirán aumentar la semántica de nuestra base de conocimiento: •Operadores aritméticos +, - , * , / // : cociente de la división (división entera) mod : resto de la división (módulo) ^ : potencia (primer operando elevado a segundo operando) • Operadores relacionales >,=,V. %% Consultar todos los equipos de Huelva que ganan en casa y los tanteos ?- ganacasa(X,’Huelva’,Y,Z). X=‘Tigres’, Y=10, Z=0; X=‘Osos’, Y=17, Z=2; No %% Consultar todos los equipos de Huelvaque ganan en casa por más de 10 tantos: ?- ganacasa(X,’Huelva’,Y,Z), Y > Z+10. X=‘Osos’, Y=17, Z=2; No Partido 1: •Tigres de Huelva •Gigantes de Albacete •10 •0 Partido 1: •Osos de Huelva •Águilas de Lugo •17 •2
Departamento de Electrónica, Sistemas Informáticos y Automática Universidad de Huelva
Pág. 12
Curso 2004-2005
Programación Declarativa
Tema 2: Aritmética, datos yestructuras en Prolog
• Árboles
En Prolog, los predicados pueden interpretarse como árboles: oracion( sujeto( ‘Pedro’ ), predicado( verbo( ‘come’ ), objetodirecto( ‘bocadillo’ ) ) )
oracion sujeto predicado verbo objetodirecto
Pedro
come
bocadillo
Y, del mismo modo, pueden representarse árboles en forma de predicados:
a c 1 2 3
b
arbol( a, arbol( c, arbol( 1, 2, 3 ) ), b )Departamento de Electrónica, Sistemas Informáticos y Automática Universidad de Huelva
Pág. 13
Curso 2004-2005
Programación Declarativa
Tema 2: Aritmética, datos y estructuras en Prolog
• Árboles
Ejemplo: escribir el recorrido en inorden de un árbol de expresión aritmética
+ * /
% Utilizaremos el predicado % a( operador, hijo_izquierda, hijo_derecha ) % el árbol de la figura es:%a( +, a( *, 3, 9 ), a( /, a( -, 1, a( *,4,8 ) ), a(^,7,2) ) ) %Y deseamos obtener el recorrido en inorden:
^
3
9
-
%( (3*9) + ( ( 1 - (4*8) ) / (7^2) ) ) %Solución en Prolog
1
*
7
2
4
8
inord( a(OP,HI,HD) ):write(‘(‘),inord(HI),write(OP),inord(HD),write(‘)’). inord(X):-write(X).
Departamento de Electrónica, Sistemas Informáticos y Automática Universidad deHuelva
Pág. 14
Curso 2004-2005
Programación Declarativa
Tema 2: Aritmética, datos y estructuras en Prolog
• Listas
Prolog implementa un tipo de dato especial: la lista. Una lista es una serie de términos separados por comas entre corchetes: [] [a,b,c] [1,p(X),b,’Casa’] Las listas también son términos, luego se permite el anidamiento: [ [], [ 1,2 ], a, [ [ 1 ], [ s, 1.4, 5 ] ] ] Unasecuencia de caracteres entre comillas es una cadena de caracteres y Prolog la trata internamente como una lista de enteros que se corresponden con los valores ASCII de los caracteres en la cadena. ?- X = “Pedro”. X = [ 80, 101, 100, 114, 111 ]
Departamento de Electrónica, Sistemas Informáticos y Automática Universidad de Huelva
Pág. 15
Curso 2004-2005
Programación Declarativa
Tema2: Aritmética, datos y estructuras en Prolog
• Listas
Unificación de listas: Dos listas unifican si sus componentes unifican una a una: [ 1, a, p(r) ] = [ 1, X, p(X) ] à unifica [ 1, X, p(r) ] = [ Y, [ a, b ], Z ] à unifica [ a, p(n), Z, [] ] = [ a, p(q), [a], [] ] à no unifica Existe una sintaxis especial para la utilización de listas: la sintaxis de barra. [ Cabeza | Cola ] Donde Cabeza...
Regístrate para leer el documento completo.