Professional Documents
Culture Documents
Predicados Extra-lgicos
Ingeniera Informtica Ingeniera Tcnica en Informtica de Sistemas Departamento de Lenguajes y Ciencias de la Computacin Universidad de Mlaga
1. 2. 3. 4. 5. 6.
Predicados extra-lgicos Predicados aritmticos Entrada/salida de trminos Unificacin y no unificacin Comparacin de trminos Declaracin de operadores
Predicados Extra-lgicos
Predicados Extra-lgicos
respuestas computadas
respuestas computadas
Predicados Aritmticos
Predicados aritmticos
Permiten evaluar expresiones aritmticas: (1 + sqrt(5)) / 2 = 1.61803 Para incorporar expresiones aritmticas a Prolog es necesario: extender la sintaxis para soportar operadores (1 + sqrt(5)) / 2 aadir funciones aritmticas predefinidas (sqrt,sin, ) aadir un predicado extra-lgico que solicite la evaluacin de expresiones aritmticas (Prolog no evala trminos)
Operadores Prolog
Definicin: un operador Prolog es un functor de aridad 1 o 2 que puede escribirse de forma prefija, postfija o infija, prescindiendo de los parntesis Ejemplo: X + Y - X +(X,Y) -(X) % +/2, infijo % -/1, prefijo sintctico, definen no tienen y
son un mecanismo exclusivamente asociada ninguna operacin (semntica) para evitar asociatividad ambigedades, se
prioridades
Operadores aritmticos
Prolog predefine los siguientes operadores aritmticos: X X X X X X X + Y Y X * Y / Y // Y mod Y ** Y suma resta menos unario producto cociente cociente divisin entera resto divisin entera potencia
al escribir 5 + 3 * 7 Prolog entiende +(5, *(3,7)) Prolog no evala los trminos: +(5, *(3,7)) 26
Predicados Extra-lgicos 11
valor absoluto signo (-1, 0, 1) mximo mnimo entero aleatorio entre 0 y X-1 raz cuadrada techo suelo redondeo truncamiento
12
Expresin aritmtica
Definicin: un trmino Prolog es un expresin aritmtica si 1) sus functores son operadores o funciones aritmticas 2) sus constantes son funciones aritmticas o nmeros 3) sus variables estn instanciadas a expresiones aritmticas 2.0 * (pi + sin(X)) cos(a)**2 5 + Y 2.0 * (pi + sin(X)) X libre, no es expresin aritmtica no es una expresin aritmtica {Y/b}, no es una expresin aritmtica {X/2*5} una expresin aritmtica
una expresin aritmtica no contiene variables libres una expresin aritmtica es un trmino no se evala por defecto
13 Predicados Extra-lgicos 14
X e Y deben ser expresiones aritmticas algoritmo X comp Y 1. vx= evaluar(X), vy= evaluar(Y) (si hay error, elevar excepcin) 2. res= vx comp vy 3. si res es cierto acabar con xito, sino acabar con fracaso donde comp {=:=, =\=, <, >, =<, >=}
Predicados Extra-lgicos
Predicados Extra-lgicos
17
18
?- 2.0 =:= 1.0 + 1.0. Yes ?- 2 =:= 1.0 + 1.0. Yes ?- 3 < 6 < 9. ERROR: Syntax error: Operator priority clash ?- X is (3 < 9). ERROR: Arithmetic: `(<)/2' is not a function
Predicados Extra-lgicos 19
recursin recursin de cola generar/comprobar pero su aplicacin esconde algunos matices Definiremos versiones extra-lgicas de los predicados sobre naturales
Predicados Extra-lgicos
20
La unificacin pierde potencia: no basta para distinguir casos base y recursivo no puede reducir el problema ni componer la solucin
21
Predicados Extra-lgicos
22
23
24
+ V
% % % %
asignar a cada letra un dgito distinto entre 0 y 9 de manera que la suma resultante cuadre Sugerencia: aplicar el paradigma generar/comprobar
Predicados Extra-lgicos
25
Predicados Extra-lgicos
26
Ejercicios
Define los siguientes predicados: 1. es_natural(X), genera los naturales X = 0,1,2,3, 2. es_entero(X), genera los enteros X = 0,-1,1,-2,2, 3. num_digitos(X,Y), el entero X tiene Y digitos 4. dig_iesimo(X,I,D), D es el I-simo dgito del entero X 5. mcd(X,Y,Z), Z es el mximo comn divisor de X e Y 6. pascal(I,J,X), X es el elemento (I,J) del tringulo de Pascal 7. fibonacci(N,F), F es el N-simo Fibonacci 8. biseccion(F,A,B,R), R es una raz de la funcin F en el intervalo [A,B]
Ejercicios
9. Resuelve el puzzle cripto-aritmtico: S E N D M O R E M O N E Y 10. Dada la matriz de orden 3 A D G
B E H
C F I
asigna a cada letra un dgito distinto, de manera que las filas, columnas y diagonales principales sumen 15
Predicados Extra-lgicos 28
Predicados Extra-lgicos
27
Perifricos y flujos
La entrada/salida de Prolog est basada en flujos: los flujos permiten tratar uniformemente una variedad de perifricos, como una secuencia de informacin un flujo es un tipo abstracto que soporta, entre otras, operaciones de apertura, cierre, lectura y escritura un flujo puede estar en cuatro modos de operacin: entrada, salida, concatenacin y actualizacin un flujo soporta tres tipos de informacin: binarios, texto y trminos
Predicados Extra-lgicos 30
Entrada/Salida de Trminos
slo se pueden leer y escribir trminos completos para simplificar, emplearemos flujos de trminos asociados a la entrada y salida estndar (por defecto, teclado y pantalla)
Predicados Extra-lgicos
31
% X est libre
?- read(fecha(D,M,A)). |: fecha(2,febrero). No
Yes
Predicados Extra-lgicos 35 36
Unificacin y no unificacin
?X = ?Y unifica X con Y, instanciando variables (test o generador nico) no tiene en cuenta el test de ocurrencia
Unificacin y No Unificacin
+X \= +Y comprueba que X e Y no unifican (test, no instancia variables) no tiene en cuenta el test de ocurrencia unify_with_occurs_check(?X,?Y) unifica X con Y, instanciando variables (test o generador nico) tiene en cuenta el test de ocurrencia No son extra-lgicos
Predicados Extra-lgicos 38
Comparacin de Trminos
40
% no evala
% no instancia
41
Operadores Prolog
mejoran la legibilidad, permitiendo prescindir de los parntesis son una mera facilidad sintctica, no tienen asociada ninguna operacin (semntica)
Declaracin de Operadores
Ejemplo: 2 + 3 * 5 = +(2,*(3,5)) la precedencia y asociatividad evitan ambigedades que resultan al prescindir de los parntesis Ejemplo: X ** 3 mod 13 = (X**3) mod 13 1+2-3+4-5 = (((1+2)-3)+4)-5
Predicados Extra-lgicos 44
Precedencia de operadores
cada operador tiene asignada una precedencia (1..1200) Dado un trmino Prolog, su precedencia es: si es compuesto la de su functor principal si no es compuesto (constante o variable) 0 si est entre parntesis 0 Ejemplo: 2 + A * 3 + 2 A
Predicados Extra-lgicos
Asociatividad de operadores
se aplica cuando coinciden las precedencias un operador puede ser: asociativo a la izquierda: su argumento izquierdo puede tener menor o igual precedencia asociativo a la derecha: su argumento derecho puede tener menor o igual precedencia no asociativo: sus argumentos deben tener menor precedencia Ejemplo: A * B / 2 % *,/ 400 / 400, asoc. izq.
500
400
mayor precedencia
2 B
46
La directiva op/3
El programador puede declarar sus propios operadores: :- op(+Precedencia, +Tipo, +Nombre). Precedencia: un entero entre 1 y 1200 Tipo: indica posicin (f) y asociatividad (y) o no (x) yfx infijo, asociativo a la izquierda xfy infijo, asociativo a la derecha xfx infijo, no asociativo fy prefijo, asociativo fx prefijo, no asociativo yf postfijo, asociativo xf postfijo, no asociativo Nombre: tomo
Predicados Extra-lgicos 47
El predicado current_op/3
Permite consultar qu operadores hay predefinidos y declarados: current_op(?Precedencia, ?Tipo, ?Nombre) Ejemplo: ?- current_op(P,T,-). P = 500 T = fx ; P = 500 T = yfx ; No
Predicados Extra-lgicos 48
Definicin de dominio: declaramos un operador es_natural :- op(800, fx, es_natural). es_natural c. es_natural s X :- es_natural X.
Predicados Extra-lgicos
50
Ejemplo: podemos escribir s s s c + s s c Problema: los operadores aritmticos son binarios (+/2), y las relaciones aritmticas son ternarias (suma/3) % suma/3 c + Y s X + Y Cmo lo resolvemos?
Predicados Extra-lgicos
??? :- ??? :-
Ejercicios
1. Define otros predicados de la aritmtica natural mediante operadores (producto, potencia, factorial,). Aplica recursin de cola cuando sea conveniente. 2. Declara operadores cm y m para representar medidas de longitud expresadas en centmetros y metros: 37.5 cm 4 m Declara un operador := y define un predicado que permita sumar longitudes, expresando el resultado en la mayor unidad, tal y como muestran los objetivos: ?- 1 cm + 3 cm := 4 cm. Yes ?- 37.5 cm + 4 m := X. X = 4.375 m
Predicados Extra-lgicos 53