Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Predicados extra-lógicos
Predicados Extra-lógicos 2. Predicados aritméticos
3. Entrada/salida de términos
4. Unificación y no unificación
5. Comparación de términos
Ingeniería Informática 6. Declaración de operadores
Ingeniería Técnica en Informática de Sistemas
Departamento de Lenguajes y
Ciencias de la Computación
Universidad de Málaga
Predicados Extra-lógicos 2
consultas
Predicados Extra-lógicos Programa
(cláusulas de Horn)
respuestas computadas
Motor de Inferencia
(SLD-Resolución)
Motor de Inferencia
suelen ser deterministas (respuesta única) y soportar sólo
(SLD-Resolución) algunos usos
+
Evaluador Extra-lógico Ventajas: aplicación práctica, expresividad, eficiencia
Inconvenientes: dificulta análisis y transformación de programas
Predicados Extra-lógicos 5 Predicados Extra-lógicos 6
aritméticos
entrada/salida
comparación de términos
Predicados Aritméticos
declaración de operadores
Ejemplo: is(?X,+Y)
read(-X)
write(+X)
Predicados Extra-lógicos 7
Predicados aritméticos Operadores Prolog
Permiten evaluar expresiones aritméticas: Definición: un operador Prolog es un functor de aridad 1 o 2 que
puede escribirse de forma prefija, postfija o infija,
(1 + sqrt(5)) / 2 = 1.61803 prescindiendo de los paréntesis
Para incorporar expresiones aritméticas a Prolog es necesario: Ejemplo:
X + Y +(X,Y) % +/2, infijo
extender la sintaxis para soportar operadores
- X -(X) % -/1, prefijo
(1 + sqrt(5)) / 2
son un mecanismo exclusivamente sintáctico, no tienen
añadir funciones aritméticas predefinidas (sqrt,sin, …) asociada ninguna operación (semántica)
% es_par(+X) C A M A
es_par(X) :- X mod 2 =:= 0. + M E S A
% en_pares(+N,?X,?Y) V I C I O
en_pares(N,X,Y) :-
es_par(N), % comprobar asignar a cada letra un dígito distinto entre 0 y 9 de manera que
entre(0,N,X), % generar (acotado) la suma resultante cuadre
es_par(X), % comprobar
Y is N-X. % generar (único) Sugerencia: aplicar el paradigma generar/comprobar
Ejercicios Ejercicios
Define los siguientes predicados: 9. Resuelve el puzzle cripto-aritmético:
Predicados Extra-lógicos 30
Ejemplo: nl
t(h(X), a). f(A,1+2). escribe un fin de línea en la salida estándar
4*pi.
tab(+N)
s(s(s(c))). s(s(a)).
escribe N espacios en la salida estándar (N es una expresión
aritmética entera)
sólo se pueden leer y escribir términos completos
para simplificar, emplearemos flujos de términos asociados a la display(+X)
entrada y salida estándar (por defecto, teclado y pantalla) escribe el término X en la salida estándar (sin tener en cuenta
las declaraciones de operadores)
Ejemplo: una calculadora simple (I) Ejemplo: una calculadora simple (y II)
Escribir un programa Prolog que acepte por teclado expresiones
aritméticas sin variables y muestre el resultado de evaluarlas. El calc :-
programa debe terminar al introducir la palabra fin. write('>> '),
read(Exp),
Ejemplo: evalua(Exp).
?- calc.
>> 2+3*5. evalua(fin).
17 evalua(Exp) :-
>> sin(pi) + cos(pi). Exp \= fin, % Exp y fin no unifican
-1 R is Exp,
>> fin. write_ln(R), % write + nl
calc.
Yes
Unificación y No Unificación +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-lógicos
Predicados Extra-lógicos 38
Predicados Extra-lógicos 40
Comparación de términos Prolog Ejemplos de comparación de términos
Prolog predefine los siguientes operadores: ?- 1 + 2 == 1 + 2.
Yes
+X == +Y
+X \== +Y ?- 1 + 2 == 2 + 1. % no evalúa
+X @< +Y No
+X @> +Y
?- 1 + 2 =:= 2 + 1.
+X @=< +Y
Yes
+X @>= +Y
?- f(X) == f(Y). % no instancia
todos son tests (+,+), no instancian variables No
el evaluador extra-lógico ejecuta la comparación según el orden
estándar, dando lugar a un éxito o un fracaso ?- f(X) = f(Y).
X = Y = _G251
Predicados Extra-lógicos 41 Predicados Extra-lógicos 42
Operadores Prolog
mejoran la legibilidad, permitiendo prescindir de los paréntesis
son una mera facilidad sintáctica, no tienen asociada ninguna
operación (semántica)
Ejemplo:
X ** 3 mod 13 = (X**3) mod 13
1+2-3+4-5 = (((1+2)-3)+4)-5
Predicados Extra-lógicos 44
Precedencia de operadores Asociatividad de operadores
cada operador tiene asignada una precedencia (1..1200) se aplica cuando coinciden las precedencias
Dado un término Prolog, su precedencia es: un operador puede ser:
si es compuesto la de su functor principal asociativo a la izquierda: su argumento izquierdo puede tener
si no es compuesto (constante o variable) 0 menor o igual precedencia
si está entre paréntesis 0 asociativo a la derecha: su argumento derecho puede tener
menor o igual precedencia
Ejemplo: 2 + A * 3 % prec: + 500 * 400 no asociativo: sus argumentos deben tener menor precedencia
A 3 menor precedencia A B
Predicados Extra-lógicos 45 Predicados Extra-lógicos 46
Objetivos:
es_natural c.
?- Quien habla ingles. es_natural s X :- es_natural X.
?- elena habla Que.
?- Quien habla Que.
Predicados Extra-lógicos 49 Predicados Extra-lógicos 50
?- 1 cm + 3 cm := 4 cm.
Yes
?- 37.5 cm + 4 m := X.
X = 4.375 m
Predicados Extra-lógicos 53