Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 2:
Variables anónimas
Operadores y aritmética
UNIVERSIDAD DE VALLADOLID
Índice
1. Variables anónimas
2. Alcance de las variables y constantes
3. Igualdad
4. Desigualdad
5. Igualdad y desigualdad estrictas
6. Aritmética
7. Ejercicios
1. Variables anónimas (I)
Se representan mediante el guión bajo “_”
% tiene_un_hijo(X) :- padre(X,Y).
Como Y solo aparece una vez, puede usar una variable anónima
tiene_un_hijo(X) :- padre(X,_).
% alguien_tiene_un_hijo :- padre(X,Y).
En esta cláusula como X e Y aparecen solo una vez, puedo
sustituirlas por variables anónimas, y ambas serán distintas.
alguien_tiene_un_hijo :- padre(_,_).
alguien_tiene_un_hijo.pl
padre(carlos, jorge).
padre(jorge, maria).
padre(luis,miguel).
alguien_tiene_un_hijo:-padre(_,_).
?- alguien_tiene_un_hijo.
true ;
true ;
true.
2. Alcance de variables y constantes (I)
El alcance léxico de los nombres de variable es una
cláusula. Cada vez que aparece X en la misma
cláusula significa la misma variable.
m(d).
a(X):-b(X),c(X). % la variable X es la misma las 3 veces que aparece
h(X,d):-j(X,_). % las dos X aquí son iguales entre sí y distintas de las
% tres X de la cláusula anterior
p(Z):-r(_,_). % las dos variables anónimas son distintas entre sí, y
% distintas de la de la cláusula anterior.
Ejemplos:
?- 4 is 8/2. (true: evalúa 8/2 y unifica con 4)
?- 5 is 8*2. (false: evalúa 8*2 y no unifica con 5)
?- N is 15//2.
N = 7. (evalúa 15//2 y unifica. Retorna valor variable unificada)
?- 2 is 4/X. (Error ya que la variable X no está instanciada y no se
puede realizar la operación de la derecha del is)
?- 4/X is 2. (false, 2 no puede unificar con 4/X)
7. Ejercicios (I)
Escribir el siguiente programa, y realizar las consultas que se
proponen u otras que quieras. Antes de realizarlas, pensar qué
va a dar Prolog. Contrastarlo con el resultado e intentar
entender por qué lo da.
Ejercicio:
reina(carlos_i, 1516, 1556). rey_casa_austria(X, Y):-
reina(felipe_ii, 1556, 1598). Y>=1516, Y=<1700,
reina(felipe_iii, 1598, 1621). reina(X, A, B),
reina(felipe_iv, 1621, 1665). Y >= A, Y =< B.
reina(carlos_ii, 1665, 1700).
?- reina(carlos_ii, X, Y). ?- rey_casa_austria(X, 1621).
?- rey_casa_austria(X, 1600). ?- rey_casa_austria(X, Y).
7. Ejercicios (II)
Realización de cálculos:
Ejercicio:
poblacion(eeuu, 203). superficie(eeuu, 3). densidad(X, Y) :-
poblacion(india, 548). superficie(india, 1). poblacion(X, P),
poblacion(china, 800). superficie(china, 4). superficie(X, S),
poblacion(brasil, 108). superficie(brasil, 3). Y is P/S.
?- densidad(eeuu, X).
?- densidad(X, 67.6667).
?- densidad(X, 36).
?-densidad(eeuu, 203/3).
7. Ejercicios (III)
Respecto al ejercicio de la familia del
tema 1:
Modificar la regla hermana o hermano para
que una persona no sea hermana/o de sí
misma/o. (Recordar que el operador
desigualdad es \= y refleja que dos
objetos son distintos).