Created
August 4, 2021 23:47
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% ---------------------------------------------+ | |
% 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