Logo Studenta

Paradigma logico

¡Estudia con miles de materiales!

Vista previa del material en texto

PARADIGMA LOGICO 
 
HECHOS Y REGLAS 
 
1) 
par(0). 
par(1):-! , fail. 
par(X) :- X < 0 , Y is X + 2 , par(Y). 
par(X) :- X > 0 , Y is X - 2 , par(Y). 
2) 
 a) 
suma(0,X):-!. 
suma(N,S):-Z is N-1, suma(Z,W), S is (N*2) + W. 
 b) 
sumapares(N,Y,0):-N=<Y,!. 
sumapares(N,Y,S):-Z is Y+1, sumapares(N,Z,W),S is (Z*2) + W. 
suma(N,S):-sumapares(N,0,S). 
 
3) 
 a) 
potencia(X,0,1) :- !. 
potencia(B,E,V) :- X is E-1, potencia(B,X,Y) , V is B * Y. 
 b) 
potencia(X,1,R) :- R is X. 
potencia(X,Y,R):- Z is Y-1, potencia(X,Z,W), R is X*W. 
 
4) 
fibonacci(0,0). 
fibonacci(1,1). 
fibonacci(N,R):- N>1 , N1 is N -1 ,N2 is N-2 ,fibonacci(N1,X),fibonacci(N2,Y),R is X + Y. 
5) 
 a) Una alternativa sería agregar una aridad 
 
and(0,0,0). 
and(0,1,0). 
and(1,0,0). 
and(1,1,1). 
 
or(0,0,0). 
or(0,1,1). 
or(1,0,1). 
or(1,1,1). 
 
not(0,1). 
not(1,0). 
 
circuito(Q1,Q2,S) :- not(Q1,A),and(A,Q2,B),not(Q2,C),and(C,Q1,D),or(B,D,S) 
 
 b) Pero no es lo solicitado por lo que agregamos reglas auxiliares: 
 
or(0,1). 
or(1,0). 
or(1,1). 
 
and(1,1). 
 
no(0). 
 
% reglas auxiliares 
or(A,B,C):-or(A,B),C = 1. 
or(A,B,C):-not(or(A,B)),C = 0. 
and(A,B,C):-and(A,B),C = 1. 
and(A,B,C):-not(and(A,B)),C = 0. 
no(0,C):- C = 1. 
no(1,C):- C = 0. 
 
circuito(Q1,Q2,S) :- no(Q1,A),and(A,Q2,B),no(Q2,C),and(Q1,C,D),or(B,D,S). 
6) 
sintoma(carina,nauseas). 
sintoma(mauricio,fiebre). 
sintoma(carlos,cafalea). 
 
enfermedad(nauseas,embarazo). 
enfermedad(fiebre,virus). 
enfermedad(cafalea,stress). 
 
diagnostico(P,S,E):-sintoma(P,S) , enfermedad(S,E). 
% una persona P que tiene el síntoma S tienen la enfermedad E si se cumple que la persona P 
tiene el síntoma S y el síntoma S causa la enfermedad E. 
 
Y),write(Z),write(' '). 
 
 
Listas 
 
1) suma(S,[]):- S is 0. 
 Suma(S,[Ca|Co]):-suma(S1,Co),S is Ca + S1. 
 
2) 
 cantidad([],0):-! 
 cantidad([_|Co],N) :-cantidad(Co,S), N is S + 1. 
 
3) 
 a) 
 ultimo([Ca|],U):- U is Ca, !. 
 ultimo([Ca|Co],u):- ultimo (Co,U1), U is U1. 
 
 b) 
 ultimo([x],X) 
 ultimo([X|L],U) :-ultimo (L,U). 
 
4) 
 concatenar([],L,L):-! 
 concatenar([Ca|Co],L,[Ca|Co1]):-concatenar(Co,L,Co1). 
 
 inversa([],[]):-! 
 inversa([Ca|Co],I):-inversa(Co,II), concatenar (II,[Ca],I). 
 
5) 
 sacar([_|Co],1,Co):-!. 
 sacar([Ca|Co],N,[Ca,|Co1]):-M is N-1, sacar(Co,M,Co1). 
 
 Goal: sacar([a,b,c,d,e],2,L) 
 
6) 
 eliminar([],_,[]):-! 
 eliminar([X|Y],x,z):-!, eliminar(Y,Z,X). 
 eliminar([Y|L],X,[Y,Z]):-eliminar(L,X,Z). 
 
7) 
 eliminar([],_,[]):-! 
 eliminar(X|Y],X,Z):-!, eliminar(Y,X,Z). 
 eliminar([Y|L],X,[Y,Z]):-eliminar(L,X,Z) 
 
8) 
 pertenece(X,[X|_]):-!. 
 pertenece(X,[_|Y]):-pertenece(X,Y),!. 
 
 intersec([],_,[]). 
 intersec([X|Y],L,[X|La]):-pertenece(X,L),eliminar(L,X,Lc),!,intersec(Y,Lc,La). 
 intersec([_|Y],L,La):-intersec(Y,L,La). 
 
9) 
 rotizq(R,0,R). 
 rotizq([X|L],N,R):-N1 is N-1, concatenar(L,[X],R1),rotizq(R1,N1,R). 
 
10) 
 insertarEn([Ca|Co],L,1,R):-concatenar([Ca|Co],L,R). 
 insertarEn([Ca],[Ca1|Co1],P,R):-P1 is P-1, insertarEn([Ca],Co1,P1,R1). 
 concatenar([Ca1],R1,R]. 
 
 %Goal: insertarEn([9],[1,2,3,4,5],3,R). 
 
11) 
 insOrden([],E,[E]). 
 insOrden([H|T],E,[E,H|T]):-E=<H. 
 insOrden([H|T],E,[H|S]:-E>H,insOrden(T,E,S). 
 
 %goal:insOrden([1,2,5],3,x). 
 
12) 
 ordenada([],[]). 
 ordenada([H|T],S):-ordenata(T,SortT),insOrden(SortT,H,S). 
 
 goal: ordenada([2,4,1,0,6],X). 
 
 
 
Estructura de Datos 
 
1) concatenar([],L,L). 
 concatenar([Ca|Cp],L,[Ca|Co1]):-concatenar(Co,L,Co1) 
 
 cantidad([],0). 
 cantidad([_|Co],N):-cantidad(Co,S),N is S+1. 
 
 parejasX(X1,[X2|Y2],L):-Y2==[],L=[[X1,X2]] 
 parejasX(X1,[X2|Y2],L),parejasX(X1,Y2,L2),concatenar(L2,[[X1,X2]],L). 
 
 parejasY([],_,[]). 
 parejasY([X1|Y1],[X2|Y2],L1):- 
 parejasX(X1,[X2|Y2],L2),parejasY(Y1,[X2|Y2],L3),concatenar(L2,L3,L1) 
 
 parejas(X,Y,L):-cantidad(X,M),cantidad(Y,N),N=:=M,parejasY(X,Y,L). 
 
 %?-parejas([a,b,c],[1,2,3],L). 
 %L=[[a,3],[a,2],[a,1],[b,3],[b,2],[b,1],[c,3],[c,2],[c,1]] 
 
 
2) padre(persona(r,101,80),persona(a,102,60)). 
 padre(persona(r,101,80),persona(b,103,60)). 
 padre(persona(r,101,80),persona(c,104,60)). 
 
 padre(persona(a,102,60),persona(d,105,40)). 
 padre(persona(a,102,60),persona(e,106,40)). 
 
 padre(persona(e,106,40),persona(h,107,20)). 
 
 padre(persona(b,103,60),persona(f,108,40)). 
 padre(persona(b,103,60),persona(g,109,40)). 
 
 padre(persona(f,108,40),persona(i,110,20)). 
 padre(persona(f,108,40),persona(j,111,20)). 
 
 padre(persona(g,109,40),persona(k,112,20)). 
 
 ascendientes(X,Y):-padre(Y,X). 
 ascendientes(X,Y):-padre(X,Z),ascendientes(Y,X). 
 
 % o tambien 
 %descendientes(X,Y):-padre(X,Y). 
 %descendientes(X,Y):-padre(z,Y),descendientes(X,Z). 
 
 -? descendientes(persona(r,101,80),x). 
 
 
 
3) persona,nombre('Mauricio'),telefono('155002354'),sexo('M'),edad(35)). 
 persona,nombre('Carlos'),telefono('15512345678'),sexo('M),edad(35)). 
 persona,nombre('Carina'),telefono('15512345679'),sexo('F'),edad(35)). 
 
 % Buscar si una persona existe. 
 existepersona(x):-persona(X,_,_,_). 
 %?-existepersona(nombre('Mauricio')). 
 
 %Mostrar todas las personas 
 mostrar(X,_,_,_). 
 %?-mostrar(X). 
 
 %Mostrar todas las mujeres. 
 mostrarmujeres(X):-persona(nombre(X),_,sexo('F'). 
 %?-mostrarmujeres(X) 
 
 %Mostrar todos los varones mayores de 21 años. 
 varonesmayores(X):-persona(nombre(X),_,sexo('M'),edad(Y)),Y>21. 
 %?-varonesmayores(X). 
 
 %Definir la relación casado con telefono. 
 casado(nombre('Mauricio'),nombre('Carina')). 
 casadocontelefono(X):-
(casado(nombre(X),_);casado(_,nombre(X))),persona(nombre(X),telefono(tel),_,_),Tel\==". 
 %?-casados(X). 
 
 %indicar para que sirve:c(X) if casado(X,Y), visita (Y,Z),persona(Z,_,m). 
 %Y puede ser infiel. 
 
 
4) ruta(sanjuan, cordoba,480). 
 ruta(cordoba,sanluis,350). 
 ruta(sanluis,bsas,710). 
 ruta(cordoba,santafe,280). 
 ruta(cordoba,misiones,950). 
 ruta(cordoba,bsas,540). 
 ruta(misiones,santafe,570). 
 ruta(mendoza,sanjuan,160). 
 ruta(mendoza,sanluis,280). 
 
 camino(X,Y):-ruta(X,Y,_). 
 camino(X,Y):-ruta(X,Z,_),camino(Z,Y). 
 
 distancia(X,Y,D):-ruta(X,Y,D). 
 distancia(X,Y,D):-ruta(X,Z,D1),distancia(Z,Y,D2), D is D1+D2 
 
 mostrarCiudad(X,Y):-ruta(X,Y,_). 
 mostrarCiudad(X,Y):-ruta(X,Z,_),mostrarCiudad(Z,Y),write(Z),write('').

Continuar navegando

Materiales relacionados