Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semana 1
Ejercicio 1
Usando consola:
Resolucion
Ejercicio 2
Definicin de predicados:
Resolucin:
Ejercicio 3
Semana 2
Ejercicio 4
Diagnstico de enfermedades
Sntoma Enfermedad
Fiebre Gripe
Tos Gripe
Cansancio Anemia
Ardor Gastritis
Nausea Gastritis
Vomitos Gastritis
Vomitos Apendicitis
Fiebre Apendicitis
Remedio Enfermedad
Jarabe Gripe
Aspirinas Gripe
Dieta Gastritis
Cirujia Apendicitis
enfermo(juan,gripe).
enfermo(alicia,anemia).
enfermo(patricio,apendicitis).
enfermo(pedro,gripe).
enfermo(ricardo,gripe).
enfermo(roxana,gastritis).
Escriba un predicado que muestre los sntomas para una persona determinada.
i) Se conoce adems que cada enfermedad tiene asociada una determinada cantidad de
das de reposo mnimo y mximo:
Enfermedad Das de reposo Das de reposo
mnimo mximo
Anemia 6 10
Gastritis 3 5
Apendicitis 5 7
Resolucin
Ejercicio 5
Caso de estudio/Arribos
Se solicita definir las reglas que nos permitan responder las siguientes consultas:
1. Informar el nmero de vuelo y el estado de los arribos cuya procedencia es
Aeroparque.
2. Informar el nmero de vuelo, la lnea y la procedencia de los vuelos cancelados.
Resolucin
linea(2, 'Austral').
linea(4, 'Gol').
Ejercicio 6
Resolucin
vive_mansion(agatha).
vive_mansion(carnicero).
vive_mansion(charles).
odia(agatha, X):- vive_mansion(X), X\=carnicero.
odia(charles,X):- vive_mansion(X), not(odia(agatha, X)).
odia(carnicero,X):- odia(agatha, X).
mas_rico(X, agatha):- vive_mansion(X), not(odia(carnicero,X)).
asesino(X, Y):- vive_mansion(X), odia(X,Y), not(mas_rico(X,Y)).
Ejercicio 7
Empleados Pyme
Se necesita desarrollar un programa bajo el paradigma lgico para una pyme de nuestra
ciudad. En esta empresa trabajan tanto empleados cuyo domicilio se encuentra en la ciudad
como en otras ciudades de la provincia. As mismo, la empresa dispone de empleados
efectivos o contratados. A los contratados se les paga por hora, de acuerdo a la cantidad de
horas trabajadas al mes, y por lo general, pertenecen al rea de Limpieza. En el caso de los
efectivos, tienen un salario bsico al cual se le suma un porcentaje del mismo, de acuerdo a la
cantidad de aos de antigedad y un coeficiente de incremento por antigedad.
El salario de los empleados contratados se calcula multiplicando el precio por hora, cantidad de
horas al da y la cantidad de das trabajados al mes. El salario de los empleados efectivos se
calcula sumndole al bsico el producto del salario bsico por la cantidad de aos de
antigedad, multiplicado a su vez por el coeficiente de incremento
dividido 100.
Trabajador:
rea:
Localidad:
Resolucin
area(1,'Gerencia').
area(2,'Marketing').
area(3,'Limpieza').
localidad(1,'Crdoba').
localidad(3,'Calamuchita').
localidad(4,'Laborde').
trabajador(111,'Mara','Richardi',domicilio('Jujuy',142,1),3,contrato(24,25.5,5)).
trabajador(222,'Diana','Bambini',domicilio('Calle 1',339,3),3,contrato(20,25.5,7)).
trabajador(333,'Lara','Pointer',domicilio('Per',721,3),2,efectivo(2200,1,2)).
trabajador(555,'Ximena','Coraggio',domicilio('Salta',545,1),3,contrato(24,25.5,8)).
trabajador(666,'Gaspar','Gioia',domicilio('Chile',123,2),3,contrato(20,25.5,7)).
trabajador(777,'Vera','Petro',domicilio('Salta',888,2),1,efectivo(2500,8,2.5)).
trabajador(888,'Gastn','Bravi',domicilio('Lujn',104,1),2,efectivo(1800,9,2)).
punto_1(Leg,CantHs,NomArea):-
trabajador(Leg,_,_,_,IDAREA,contrato(X,_,Y)),area(IDAREA,NomArea),CantHs is X*Y.
punto_2(Leg,Nom,Ap,NomLoc,NomArea,CantHs):-
trabajador(Leg,Nom,Ap,domicilio(_,_,IDLOC),IDAREA,contrato(X,_,Y)),localidad(IDLOC,NomLo
c),area(IDAREA,NomArea),CantHs is X*Y,CantHs>125.
punto_3(Leg,Nom,Ap,NomLoc,NomArea,Ant):-
trabajador(Leg,Nom,Ap,domicilio(_,_,IDLOC),IDAREA,efectivo(_,Ant,_)),localidad(IDLOC,NomL
oc),area(IDAREA,NomArea),Ant>10.
punto_5(Leg,Nomb,Ap,Area,Loc):-
trabajador(Leg,Nomb,Ap,domicilio(_,_,IDLOC),IDAREA,contrato(_,_,_)),
area(IDAREA,Area),localidad(IDLOC,Loc),IDLOC =\=1.
punto_6(Leg,Sal):-(trabajador(Leg,_,_,domicilio(_,_,IDLOC),_,contrato(X,Y,Z)),IDLOC=:=1,Sal
is X*Y*Z);
(trabajador(Leg,_,_,domicilio(_,_,IDLOC),_,contrato(X,Y,Z)),IDLOC=\=1,Sal is X*Y*Z+250);
Semana 3
Ejercicio 8
Ranking ATP 2012
1. Ranking
2. Nombre
3. Nacionalidad
4. Partidos ganados
5. Partidos perdidos
6. Aces totales
7. Promedio de aces por partido
8. Porcentaje de servicio ganados
9. Porcentaje de partidos ganados en el servicio
10. Porcentaje de breakpoints ganados
11. Porcentaje de breakpoints salvados
Teniendo en cuenta esta informacin, responda las siguientes preguntas creando predicados
segn sea necesario:
Se conoce tambin las debilidades y fortalezas de los jugadores, en particular, se conoce que:
Teniendo esta informacin, realice las siguientes actividades y responda las preguntas:
Resolucin
%jugador(P,N,arg,_,_,_,_,_,_,_,_).
% b)Quines son los tenistas que tienen ms del 87% de partidos ganados
% en el servicio.
punto_b(N,Nac,P):-jugador(_,N,Nac,_,_,_,_,_,P,_,_), P>87.
% break point?
%f)Se dice que un jugador tendr ms chances de ganar si el promedio de partidos ganados es
mayor que el de su oponente, no est separado por ms de 5 posiciones del rival en el ranking
y tiene el mayor porcentaje de servicios ganados. Implemente una regla que permita quin ser
el ganador entre dos jugadores.
punto_f_prom(J,Prom):-jugador(_,J,_,PG,PP,_,_,_,_,_,_),Prom is PG/(PG+PP).
punto_f_distancia(J1,J2,D):-jugador(R1,J1,_,_,_,_,_,_,_,_,_),jugador(R2,J2,_,_,_,_,_,_,_,_,_), D
is abs(R1-R2).
punto_f(J1,J2):-punto_f_prom(J1,P1),
punto_f_prom(J2,P2),P1>P2,
punto_f_distancia(J1,J2,D), D=<5,
jugador(_,J1,_,_,_,_,_,PSG1,_,_,_),
jugador(_,J2,_,_,_,_,_,PSG2,_,_,_), PSG1>PSG2.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Punto a
ganador_en(cesped, X):-member(X,[novak_djokovic,jo-
wilfried_tsonga,milos_raonic,marcos_baghdatis,jarkko_nieminen,andy_murray,john_isner,sam_
querrey,kevin_anderson,martin_klizan,richard_gasquet,david_ferrer]),!.
ganador_en(arcilla, X):-
member(X,[novak_djokovic,andy_roddick,philipp_kohlschreiber,alexandr_dolgopolov,julien_ben
neteau,tommy_haas,fernando_verdasco,jurgen_melzer,tomas_berdych,ikhail_youzhny,andreas
_seppi,stanislas_wawrinka,david_ferrer,juan_martin_del_potro]),!.
ganador_en(cemento, X):-
member(X,[florian_mayer,david_ferrer,pablo_andujar,roger_federer,marin_cilic,janko_tipsarevic
,nicolas_almagro,gilles_simon,mardy_fish,thomaz_bellucci,novak_djokovic,andy_roddick,juan_
martin_del_potro]),!.
ganador_en(sintetica, X):-member(X,
[kei_nishikori,rafael_nadal,viktor_troicki,juan_martin_del_potro,juan_monaco,jeremy_chardy,feli
ciano_lopez,marcel_granollers,novak_djokovic,andy_roddick,david_ferrer,juan_martin_del_potr
o]),!.
% Punto c
% Punto d
punto_2d(_,[],_):-!.
% Punto e
% Punto f
punto_2f(_,[],X):-X is 0,!.
punto_2f(J,[H|T],X):-(ganador_en(H,J),punto_2f(J,T,X1),X is X1+1);
(not(ganador_en(H,J)),punto_2f(J,T,X1),X is X1).
Ejercicio 9
La Liga de la Justicia VS Los Vengadores
Jeff Albertson es un reconocido vendedor de comics que nos ha pedido determinar quin
podra ser el ganador en una pelea entre los miembros de La Liga de la Justicia y Los
Vengadores. Para ello, nos ha dado la siguiente lista de los miembros de cada equipo y sus
capacidades y aptitudes:
Superman 1-2-3-4 8 No 5 5
Batman 5-6-7-8-9- 10 Si 5 3
14
La Mujer 2-8-5 9 No 3 4
Maravilla
Flash 3-4-9 7 Si 3 4
Aquaman 12-13-2-8 8 No 2 1
Flecha 7-2-5-14-17 9 Si 1 3
Verde
Cdigo Habilidad
1 Volar
2 Fuerza
3 Velocidad
4 Visin
5 Obtener informacin
6 Tecnologa
8 Proteccin a golpes
9 Qumica
11 Disparar rayos
12 Telepata
14 Uso de armas
15 Resistencia
16 Auto sanacin
17 Experto en arquera
1 Volar Todas
2 Fuerza 4-7-8-13
3 Velocidad 2-7-8-14
4 Visin 12-17
6 Tecnologa 7-8-12
9 Qumica 4-7
10 Semi-invulnerable 2
15 Resistencia 16-10-7
17 Experto en arquera 8
a) Cree una regla para mostrar todas las habilidades de un determinado superhroe.
b) Muestre todos los superhroes que posean un determinado poder y una inteligencia
mayor a 6.
c) Muestre todos los superhroes que posean un determinado poder pero no otro, por
ejemplo, que posean fuerza, pero no posean Telepata.
d) Realice el punto b y c pero slo para superhroes de La Liga de la Justicia.
e) Cree una regla que permita saber dada una habilidad, a qu otras habilidades
supera.
f) Dada una habilidad, mostrar por qu otras habilidades es superada.
Resolucin
% LIstado de superheroes
% Listado de habilidades
habilidad(1, volar).
habilidad(2, fuerza).
habilidad(3, velocidad).
habilidad(4, vision).
habilidad(5, obtener_informacion).
habilidad(6, tecnologia).
habilidad(7, pelea).
habilidad(8, proteccion_a_golpes).
habilidad(9, quimica).
habilidad(10, semi_invulnerable).
habilidad(11, disparar_rayos).
habilidad(12, telepatia).
habilidad(13, respirar_bajo_el_agua).
habilidad(14, armas).
habilidad(15, resistencia).
habilidad(16, auto_sanacion).
habilidad(17, arqueria).
% Comparacin de habilidades
supera_a(10, [2]).
supera_a(17, [8]).
%punto a
ver_habilidad([],S):- S = ''.
ver_habilidad([H|T],Hab):-habilidad(H,Nombre),
ver_habilidad(T, NombreT),
tiene_hab(Id, [H|T]):-Id=:=H,!;tiene_hab(Id,T),!.
tiene_hab(_,[]):-false.
%punto c
punto_c2(Poder1,Poder2,H):-
superheroe(H,L,_,_,_),
habilidad(Id, Poder1),
habilidad(Id2, Poder2),
tiene_hab(Id, L),
not(tiene_hab(Id2,L)).
%punto d
%punto e
punto_e(Hab,S):-habilidad(Cod,Hab),supera_a(Cod,L),ver_habilidad(L,S).
%punto f
punto_f(_,[],'').
punto_f(Cod,[H|T],Hab):-punto_f(Cod,T,X),(es_superado(Cod,H,X1),concat(X1,'-
',X2),concat(X2,X,Hab),!;concat(X,'',Hab),!).
Ejercicio 10
Empresa de Servicios
Una empresa de servicios varios ofrece la posibilidad de realizar compras varias desde un sitio
enInternet. Los usuarios solo deben registrarse e ir eligiendo cada artculo, como tambin
sucantidad.
Este sistema corre un proceso al finalizar el da que genera la siguiente base de conocimientos:
precioUnitario(producto(tomate), 12.50).
precioUnitario(producto(leche, sancor), 2.45).
precioUnitario(producto(papa), 4.50).
precioUnitario(producto(yogur, laSerenisima), 1.75).
precioUnitario(producto(yogur, sancor), 1.65).
precioUnitario(producto(yogur, manfrey), 1.15).
precioUnitario(producto(fsforos, los3Patitos), 1).
Se pide:
Ayuda: disponemos de una clusula definida llamada findall/3, que colecciona todas las
soluciones de un objetivo y retorna una lista como resultado con los valores del objetivo
definidos por una variable.
Donde:
Variable: especifica qu argumento del predicado va ser coleccionado en la lista.
predicado objetivo: es el objetivo del cual los valores sern coleccionados en la Lista
Lista: lista resultado con los valores obtenidos por Variable en cada objetivo evaluado.
Adicionalmente existe una segunda clusula predefinida que permite sumar los elementos de
una lista llamado sumlist/2:
sumlist (Lista, Suma).
3)Codifique el predicado esMarquero/1, que relaciona las personas que slo compran cosas
de marcas importantes. Deber retornar todas las personas sin repetir.
Resolucin
%Hechos
precioUnitario(producto(tomate), 12.50).
precioUnitario(producto(papa), 4.50).
marcaImportante(sancor).
marcaImportante(laSerenisima).
%Punto 2
montoCompra(Persona, Total):-
precioUnitario(Producto, Precio),
%Punto 3
Ejercicio 11
Usuarios
Para eso contamos con el predicado hoy/1 permite conocer la fecha de hoy.
hoy(fecha(15,10,2009)).
Resolucin
%Echos parte 1
%Parte 2
%Punto 1
hoy(fecha(15,10,2012)).
%Punto 2
existeUsuario(Nombre):-usuario(_,trial(Nombre,_)), estaVigente(Nombre).
estaDisponible(Nombre):- not(existeUsuario(Nombre)).
Ejercicios 12
Desarrollar un programa en Prolog que permita manejar listas con los siguientes predicados:
Resolucin
miembro(X,[X|_]).
miembro(X,[_|Y]) :- miembro(X,Y).
cuenta([],0).
cuenta([_|Y],N) :- cuenta(Y,M),
N is M+1.
concatena([],L,L).
concatena([X|L1],L2,[X|L3]) :- concatena(L1,L2,L3).
ultimo(X,[X]).
ultimo(X,[_|Y]) :- ultimo(X,Y).
inversa([X|Y],L) :- inversa(Y,Z),
concatena(Z,[X],L).
suma([],0).
Ejercicio 13
El rea de recursos humanos de un importante Club necesita obtener cierta informacin
especfica respecto a los aspirantes que se presentaron a un puesto de Guardavidas de la
pileta.
Durante las entrevistas de los aspirantes se tuvieron en cuenta los gustos de cada uno y si
sabe nadar o no.
La base de conocimiento est expresada en las siguientes tablas
A continuacin se mencionan los nombres de los deportes que se pueden practicar en el club.
Lista de deportes: atletismo, bsquet, ciclismo, natacin, equitacin, ftbol, hndbol, remo,tenis
y vley.
1) Para cada aspirante, todos los deportes que se practiquen en el club y que le guste (sin
incluir otras actividades que no sean deportes).
El listado de las actividades acuticas es: natacin, remo, danza acutica y buceo.
%aspirante/1.
aspirante('Sofa').
aspirante('Mara').
aspirante('Juan').
aspirante('Nico').
%leGusta/2.
leGusta('Sofa','programar en Java').
leGusta('Mara','pintar').
leGusta('Mara','natacin').
leGusta('Mara','tenis').
leGusta('Juan','cantar').
leGusta('Juan','ftbol').
leGusta('Juan','escuchar msica').
leGusta('Nico','remo').
leGusta('Nico','ftbol').
%sabeNadar/1.
sabeNadar('Mara').
sabeNadar('Nico').
%personasXDeporte/2. Punto 1)
personasXDeporte(X,D):- aspirante(X), leGusta(X,D),
member(D,['atletismo','bsquet','ciclismo','natacin','equitacin','ftbol','hndbol','remo'
,'tenis','vley']).
%personasXOtrasActividades/2. Punto 2)
personasXOtrasActividades(X,D):- aspirante(X), leGusta(X,D),
\+(member(D,['atletismo','bsquet','ciclismo','natacin','equitacin','ftbol','hndbol','re
mo','tenis','vley'])).
%aXLeGustaAlgnDeporte/1. Auxiliar para Punto 3)
aXLeGustaAlgnDeporte(X):-
aspirante(X),leGusta(X,D),member(D,['atletismo','bsquet','ciclismo','natacin','equitacin'
,'ftbol','hndbol','remo','tenis','vley']),!.
%aXNoLeGustaNingnDeporte/1. Punto 3)
aXNoLeGustaNingnDeporte(X):- not(aXLeGustaAlgnDeporte(X)).
cuntosDeportesSePracticanEnElClub(N):-
length(['atletismo','bsquet','ciclismo','natacin','equitacin','ftbol','hndbol','remo','
tenis','vley'],N).
%listadoDeDeportesOrdenados/1 Punto 5)
listadoDeDeportesOrdenados(L):-
sort(['atletismo','bsquet','ciclismo','natacin','equitacin','ftbol','hndbol','remo','te
nis','vley'],L).
%candidato/1. Punto 6)
candidato(X):- aspirante(X), (sabeNadar(X),!; leGusta(X,D),
member(D,['atletismo','bsquet','ciclismo','natacin','equitacin','ftbol','hndbol','remo'
,'tenis','vley']), member(D,['natacin','remo','danza acutica','buceo']),!).