You are on page 1of 31

Prolog

Operadoresaritmticos
+,,*,/
//:cocientedeladivisin(divisinentera)
mod:restodeladivisin(mdulo)
^:potencia(primeroperandoelevadoasegundooperando)

Operadoresrelacionales
>,<,>=,<=

Operadoresdeigualdad
=:unificacin.Esverdaderosiambosoperandosunifican,en
cuyocasoserealizalaunificacin.
Dados2trminoscualesquiera,T1yT2,
paraqueseunifiquenenPROLOGunode
ellosdebeserunavariablenoinstanciada
1 de 31
yalfinalacabaratomandoelvalordel
otro.
Prolog
Operadoresdeigualdad
\=:nounificacin.EsverdaderosiambosoperandosNO
unifican,encuyocasoNOserealizalaunificacin.

is:evaluador.Seutilizaparaevaluarlasexpresiones
aritmticasyfunciones.Evalalapartedeladerechayunifica
alaparteizquierda.Sinoseusaelis,lasexpresionesse
mantienenensuformaoriginal(X=3+3enlugardeX=6).

==:significaesexactamenteigualque.Comparatrminossin
evaluarexpresiones.(nounifica).Ambostrminostienenque
estarinstanciados.
2 de 31
Prolog

Operadoresdeigualdad
\==:esfalsocuandodostrminossonexactamenteiguales.(no
unifica).

=:=:mismovalor.Evalalosdosoperandos,aderechaya
izquierda,yesverdaderosilosvaloresobtenidossoniguales.
(nounifica).

3 de 31
Prolog
?Xis3+4. ?Xis8,Xis3+5.
X=7 X=8
Yes Yes

?X+Y=3+5. 3==1+2.
X=3,Y=5 No
Yes

?X=3+5. 3*3=:=9.
X=3+5 Yes.
Yes

?Xis8,X=3+5. ?X*Y=9*a.
No X=9,Y=a
Yes
4 de 31
Prolog
precio(boligrafo,0.5).
precio(folios,2.5).
precio(portatil,700).
precio(carro,5000).
precio(tomate,2).

%%Qupuedocomprarcon100pesos?
?precio(X,Y),Y<100.
X=boligrafo,Y=0,5;
X=folios,Y=2,5;
X=tomates,Y=1;
No.

5 de 31
Prolog
ganados(juan,7). ?porcentaje(X,Y).
ganados(susana,6). X=juan,
ganados(pedro,2). Y=53.84615384615385;
ganados(rosa,5). X=susana,
jugados(rosa,10). Y=85.71428571428571;
jugados(juan,13). X=pedro,
jugados(pedro,3). Y=66.66666666666666;
jugados(susana,7). X=rosa,
Y=50.0.

porcentaje(X,Y):ganados(X,Z),jugados(X,Q),Yis(Z/Q)*100.

6 de 31
Prolog
Instanciacindevariablesconoperadores:

UnavariableestinstanciadacuandoPrologleha
asignadounvalor.

Losoperadoresaritmticosyrelacionalesnecesitanque
todaslasvariablesimplicadasenlaexpresin
correspondienteestninstanciadasenelmomentoenque
serealizalaevaluacin.Enotrocaso,Prolognosavisarde
quelasvariablesnoestndebidamenteinstanciadas.El
operador=:=seincluyeenestegrupo.

7 de 31
Prolog
?5=:=X+4Error!Xnoestinstanciadaynosepuede
realizarlasuma.

Eloperadorisrequierequeestninstanciadaslas
variablesdeloperandoaladerecha.

?5isX+4Error!Xnoestinstanciadaynosepuede
realizarlasuma

?Yis1+4Correcto:Y=5

8 de 31
Prolog
Losoperadoresdeunificacin(=,\=)norequierenquelas
variablesestninstanciadas

?X=YCorrecto:X=_G210,Y=_G210(Lasvariablesse
unificanaunamisma)

Aunqueenlgicanoesimportanteelorden,squeloesen
Prolog:

?5=X+4,X=1.Error!Xnoestaninstanciadayno
sepuederealizarlasuma

?X=1,5=X+4.Correcto:X=1

9 de 31
Prolog
Elpredicadobetween/3dePrologsirveparainstanciar
variablesdentrodeintervalosdeenteros:

?5isXError!Xnoestinstanciada

?between(1,10,X),5isX.Correcto:X=5.(seinstanciaX
convaloresde1a10)

Conestoseevitaelproblemadebuscardentrodeun
espacioinfinito,yaqueXpuedetomarenprincipio
cualquiervalor.

10 de 31
Prolog

calcularlarazcuadradade16usandolaoperacindepotencia
de2(inversadefunciones)

?between(1,10,X),16isX^2.Correcto:X=4.

11 de 31
Prolog
Funciones:

Prologimplementaalgunasfuncionesmatemticas:

abs/1:valorabsoluto
cos/1:coseno
sin/1:seno
tan/1:tangente
exp/1:exponencial(ex)
log/1:logaritmoenbasee
sqrt/1:razcuadrada
round/1:redondeo
random/1:nmeroaleatorio
12 de 31
Prolog
Lasvariablesqueaparecenenelargumentodelasfunciones
debenestaradecuadamenteinstanciadas.

?Xissqrt(6).Correcto:X=2.449

13 de 31
Prolog
Tiposdedatos

Prolognoesunlenguajeconasignacindetiposfuerte.

Lalgicasepreocupamsdelasrelacionesentreobjetos
quedeltipodestos,dandoatodosellosuntratamiento
similar.

14 de 31
Prolog
Tiposdedatos

Prologincluyepredicadosquepermitenclasificartrminos:

var/1:verdaderosieltrminoesunavariableno
instanciada.
nonvar/1:verdaderosieltrminonoesunavariable
instanciada.
atom/1:verdaderosieltrminoesuntomodeProlog.
atomic/1:verdaderosieltrminoestomoonmero.
integer/1:verdaderosieltrminoesunentero.
float/1:verdaderosieltrminoesunreal.
number/1:verdaderosieltrminoesunnmero
15 de 31
Prolog
Estructuras

LaformadeintroducirdatosestructuradosenProloges
sencilla.Porejemplo:
Persona: Persona 1: Persona 2:
Nombre Pedro Ana
Apellido Lpez Macas
CC 123456789 987654321

persona(nombre(Pedro),apellido(Lpez),cc(123456789)).
persona(nombre(Ana),apellido(Macas),cc(987654321)).

%%Recuperarnombresyapellidos:
?persona(nombre(X),apellido(Y),_).
X=Pedro,Y=Lpez;
X=Ana,Y=Macas;
No. 16 de 31
Prolog
Estructuras

Deigualmodo,podemosconstruirregistroscompuestos.Por
ejemplo:

Registro Equipo: Registro Partido: Partido 1: Partido 2:


Nombre Local Amrica Nacional
Ciudad Visitante Tolima Equidad
Goles local 10 1
Goles visitante 0 2

partido(local(nombre(America),ciudad(Cali)),
visitante(nombre(Tolima),ciudad(Tolima)),glocal(10),gvisit(0)).
partido(local(nombre(Nacional),ciudad(Medellin)),
visitante(nombre(Equidad),ciudad(Bogot)),glocal(1),gvisit(2)).
17 de 31
Prolog
Estructuras

Registro Equipo: Registro Partido: Partido 1: Partido 2:


Nombre Local Amrica Nacional
Ciudad Visitante Tolima Equidad
Goles local 10 1
Goles visitante 0 2

Predicadoquenosdicesiunequipoganaensucasayeltanteo:

ganacasa(X,Y,Z,V):partido(local(nombre(X),ciudad(Y)),_,tlocal(Z),tvisit(V)),
Z>V.

18 de 31
Prolog
Estructuras

Registro Equipo: Registro Partido: Partido 1: Partido 2:


Nombre Local Amrica Nacional
Ciudad Visitante Tolima Equidad
Goles local 10 1
Goles visitante 0 2

ConsultartodoslosequiposdeCaliquegananencasaylos
tanteos

?ganacasa(X,Cali,Y,Z).
X=America,Y=10,Z=0;No
19 de 31
Prolog
Estructuras

Registro Equipo: Registro Partido: Partido 1: Partido 2:


Nombre Local Amrica Nacional
Ciudad Visitante Tolima Equidad
Goles local 10 1
Goles visitante 0 2

ConsultartodoslosequiposdeCaliquegananencasaporms
de5tantos:

?ganacasa(X,Cali,Y,Z),Y>Z+5.
X=America,Y=10,Z=0;No

20 de 31
rboles
Prolog
EnProlog,lospredicadospuedeninterpretarsecomorboles:
oracion(sujeto(Pedro),predicado(verbo(come),
objetodirecto(bocadillo)))

Y,delmismomodo,puedenrepresentarserbolesenformade
predicados:
arbol(a,arbol(c,arbol(1,2,3)),b)

21 de 31
rboles
Prolog
Ejemplo:escribirelrecorridoeninordendeunrboldeexpresin
aritmtica
%Utilizaremoselpredicado
%a(operador,hijo_izquierda,hijo_derecha)
%elrboldelafiguraes:
%a(+,a(*,3,9),a(/,a(,1,a(*,4,8)),a(^,7,2)))
%Ydeseamosobtenerelrecorridoeninorden:

%((3*9)+((1(4*8))/(7^2)))

%SolucinenProlog

inord(a(OP,HI,HD)):
write((),inord(HI),write(OP),inord(HD),write()).
inord(X):write(X).

22 de 31
Prolog
Listas

Prologimplementauntipodedatoespecial:lalista.Unalistaes
unaseriedetrminosseparadosporcomasentrecorchetes:

[]
[a,b,c]
[1,p(X),b,Casa]

Laslistastambinsontrminos,luegosepermiteel
anidamiento:

[[],[1,2],a,[[1],[s,1.4,5]]]
23 de 31
Prolog

Listas

Unasecuenciadecaracteresentrecomillasesunacadenade
caracteresyProloglatratainternamentecomounalistade
enterosquesecorrespondenconlosvaloresASCIIdelos
caracteresenlacadena.

?X=Pedro.
X=[80,101,100,114,111]

24 de 31
Prolog
Listas

Unificacindelistas:

Doslistasunificansisuscomponentesunificanunaauna:

[X,Y,Z]=[a,b,c]unifica
[X,Y,Z]=[a,b,c,d]nounifica

Existeunasintaxisespecialparalautilizacindelistas:la
sintaxisdebarra.[Cabeza|Cola]

25 de 31
Prolog
Listas

Unificacindelistas:

DondeCabezapuedeserunoovariostrminosseparadospor,y
Colaesunalista(quepuedeservaca)querepresentaalos
demstrminosdelalistaconlaqueserealizalaunificacin.

Paralaunificacinconestasintaxis,lostrminosdeCabeza
debenunificarunoaunoyColaunificaconunalistaque
contienelostrminosrestantessinincluiraquellosque
unificaronconCabeza.

26 de 31
Listas
Prolog
Ejemplos:

Longitud de una lista:

% Si queremos hallar la longitud de una lista.


% La longitud de una lista vacia es 0.
% La longitud de cualquier lista es la longitud de la cola + 1.

longitud([],0).
longitud([_|T],N):-longitud(T,N0), N is N0 + 1.

?- longitud([a,b,c],L).
L=3
?- longitud([a,b,c],4).
No

27 de 31
Listas Prolog
Ejemplos:

Bsqueda de un elemento

% Si queremos determinar si un elemento pertenece a una lista.


% El elemento pertenece a la lista si coincide con la cabeza de la lista.
% El elemento pertenece a la lista si se encuentra en la cola de la lista.

pertenece(X,[X|_]) :- !.
pertenece(X,[_|R]):- pertenece(X,R).

?- pertenece(b,[a,b,c]).
Yes
?- pertenece(b,[a,[b,c]]).
No
?- pertenece([b,c],[a,[b,c]]).
Yes
28 de 31
Prolog
Listas

Ejemplos:

Eliminar elemento de una lista

% Si queremos eliminar un elemento de la lista.


% Si X es la cabeza de la lista, la cola T es la lista sin X
% Si X no es la cabeza de la lista, conservamos la cabeza de la lista
% como parte de la respuesta y continuamos eliminando X de la cola
T.

elimina(X,[X|T],T).
elimina(X,[H|T],[H|T1]):- elimina(X,T,T1).

?- elimina(1,[1,2,3,4],R).
R = [2,3,4]
29 de 31
Prolog
Listas

Ejemplos:

Concatenar listas

% Si queremos concatenar dos listas lista.


% Concatenar una lista vacia con L es L.
% Concatenar X|L1 con L2 es poner el primer
% elemento de la primera lista (X) ms la
% concatenacin del resto de la lista (L1) con L2

concatenar([],L,L).
concatenar([X|L1],L2,[X|L3]):-concatenar(L1,L2,L3).

?- concatenar([1,2],[3,4],R).
R = [1, 2, 3, 4].
30 de 31
Prolog
Listas

Ejemplos:

Comprobar si una lista es la inversa de otra

% Si queremos calcular la inversa de una lista.


% La inversa de una lista vaca es una lista vaca
% La inversa de H|T es la inversa de T concatenada con H.

inversa([],[]).
inversa([H|T],L):- inversa(T,R), concatenar(R,[H],L).

?- inversa([a,b,c,d],[d,c,b,a]).
Yes/Si

31 de 31