Descarga la aplicación para disfrutar aún más
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('').
Compartir