Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save jhasmany-fernandez/ddedb5d0fcb3c0152a99cb2f113f0029 to your computer and use it in GitHub Desktop.
Save jhasmany-fernandez/ddedb5d0fcb3c0152a99cb2f113f0029 to your computer and use it in GitHub Desktop.
U.A.G.R.M. | Materia: Programacion Logica y Funcional | Docente: Edwin Vargas Yapura | Repositorio: Consultas Sobre Elementos De Una Lista | Lenguaje: Prolog
% ---------------------------------------------+
% GRUPO: 11 | ╔═══╗ ♪
% NOMBRE: FERNANDEZ ORTEGA JHASMANY JHUNNIOR | ║███║ ♫
% MATERIA: INF 318 - SA | ║ (●) ♫
% ---------------------------------------------+ ╚═══╝♪♪
% |---------------------------------------------+
% |CONSULTAS SOBRE ELEMENTOS DE UNA LISTA. |
% |_____________________________________________+
% 1. menor(L1, Me) : Predicado que encuentra el menor elemento de la lista L1 en Me.
eMenor(X, Y, X):- X < Y,!.
eMenor(X, Y, Y).
menor([X], X).
menor([X|L1] ,Me):- menor(L1, M1),
eMenor(X, M1, Me).
% 2. mayor(L1, My) : Predicado que encuentra el mayor elemento de la lista L1 en My.
eMayor(X, Y, X):- X > Y,!.
eMayor(_, Y, Y).
mayor([X], X).
mayor([X,Y|L1],Me):- mayor([Y|L1], M1),
eMayor(X, M1, Me).
% 3. seEncuentra(L1, X) : Predicado que es True, si el elemento X se encuentra en la lista L1.
seEncuentra([X|_] , X ):-!. seEncuentra([_|L1], X ):- seEncuentra(L1,X).
% 4. subConj(L1, L2) : Predicado que es True, si todos los elementos de L1 se encuentra en L2.
subConj([X],L2):-seEncuentra(L2,X). subConj([X|L1],L2):- seEncuentra(L2,X),
subConj(L1,L2).
% 5. suma(L1, Sum) : Predicado que encuentra la suma de los elementos de la lista L1 en Sum.
suma([],0).
suma([X|L1], Sum):- suma(L1, Sum1),
Sum is X + Sum1.
% 6. cantidad(L1, Q1) : Predicado que encuentra la cantidad de elementos de la lista L1 en Q1.
cant([],0).
cant([_|L1], C):- cant(L1,C1),
C is C1 + 1.
% 7. ordenado(L1) : Predicado que es True, si los elementos de la lista L1 están ordenados en forma ascendente o descendente.
ordenado([X|L1]):- ordenadosDes([X|L1]);
ordenadosAsc([X|L1]). ordenadosDes([_]):-!.
ordenadosDes([X,Y]):- X < Y. ordenadosDes([X,Y|L1]):- X < Y,
ordenadosDes([Y|L1]).
ordenadosAsc([_]):-!.
ordenadosAsc([X,Y]):- X > Y. ordenadosAsc([X,Y|L1]):- X > Y,
ordenadosAsc([Y|L1]).
% 8. frecuencia(L1, X, F1) : Predicado que encuentra la cantidad de veces que aparece el elemento X en la lista L1, el resultado se encuentra en F1.
frec(X, Y, Z, Z1):- X =:= Y,
Z1 is Z+1,!.
frec(_, _, Z, Z1):- Z1 is Z,!. frecuencia([], _, 0).
frecuencia([Y|L1], X, F):- frecuencia(L1, X, F1), frec(X, Y, F1, F).
% 9. iguales(L1) : Predicado que es True, si todos los elementos de la lista L1 son iguales.
iguales([_]).
iguales([X, X|L1]):- iguales([X|L1]).
% 10. diferentes(L1) : Predicado que es True, si todos los elementos de la lista L1 son diferentes. Sugerencia, utilizar el predicado frecuencia().
diferentes([_]). diferentes([X,Y]):- X =\= Y. diferentes([X,Y|L1]):- X =\= Y,
diferentes([Y|L1]).
% 11. puroPares(L1) : Predicado que es True, si todos los elementos de la lista L1 son elementos pares.
par(X):-X mod 2 =:= 0. puroPares([X]):- par(X). puoPares([X, Y]):- par(X), par(Y).
puroPares([_, Y|L1]):- par(Y),
puroPares([Y|L1]).
% 12. puroPrimos(L1): Predicado que es True, si todos los elementos de la lista L1 son elementos primos.
primo(N):- primo(N, 2).
primo(N,I):-I > N//2 , ! . primo(N,I):- N mod I =\= 0,
I1 is I+1,
primo(N, I1).
puroPrimo([X]):-primo(X). puroPrimo([X|L]):- puroPrimo(L),
primo(X).
% 13. ultimoElem(L1, X) : Predicado que encuentra el último elemento en X, de la lista L1.
ultimoElem([X], X).
ultimoElem([_|L1], X):- ultimoElem(L1, X).
% 14. existePar(L1) : Predicado que es True, si la lista L1 contiene al menos un elemento par.
existePar([X|_]):- X mod 2 =:= 0,!. existePar([_|L1]):- existePar( L1 ).
% 15. existeParImpar(L1) : Predicado que es True, si la lista L1 contiene al menos un elemento par y un elemento impar.
impar(A):- not(par(A)). existeImpar([X|_]):- X mod 2 =\= 0,!. existeImpar([_|L1]):- existeImpar( L1 ).
existeParImpar([_|L1]):- existePar(L1), existeImpar(L1),!.
% 16. extremosIguales(L1) : Predicado que es True, si los elementos extremos son iguales.
primerElemento([X|_], X). ultimoElemento([X], X).
ultimoElemento([_|L1], X1):-ultimoElemento(L1, X1). extremosIguales(L1):- primerElemento(L1, X),
ultimoElemento(L1, X).
% 17. Al menos 5 predicados adicionales cualesquiera.
% 1) Alterno(L1): Predicado que es True, si la lista L1 contiene un elemento par y un elemento impar.
alterno([X|L1]):- alternoPar([X|L1]);
(impar(X), alternoPar(L1)).
alternoPar([X]):- par(X), !.
alternoPar([X,Y]):- par(X), impar(Y), !.
alternoPar([X,Y|L1]):- par(X), impar(Y),
alternoPar(L1),!.
% 2) Promedio(L1, P): Predicado que encuentra el promedio de elementos de la lista L1 en P.
promedio(L1,P):- suma(L1, Sum),
cant(L1, Can), P is Sum // Can.
% 3) CantidadPrimos(L1, P): Predicado que encuentra la cantidad de elementos primos de la lista L1 en S.
cantidadprimos([],0). cantidadprimos([X],1):- primo(X),!. cantidadprimos([X|L1],S):- primo(X),
cantidadprimos(L1,S1), S is 1+S1,!.
cantidadprimos([_|L1],S1):- cantidadprimos(L1,S1).
% 4) nEsimo(L1, i, X) : Predicado que encuentra el n-esimo elemento de la lista L1 en X.
nEsimo([X],1,X).
nEsimo([_|L1],C,B):-D is C-1,nesimo(L1,D,B).
% 5) EliminarUltimo: Predicado que elimina el último elemento de la lista L1.
eliminarUlti([_], []).
eliminarUlti([X|L1], [X|L2]):- eliminarUlti(L1, L2).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment