domingo, 29 de mayo de 2016

Prolog | Listas | Ejercicios Resueltos

%Listas en Prolog, By ElvinC
%http://descargavariable.blogspot.com/

menor(X,Y,X):-X<Y,!.
menor(_,Y,Y).
mayor(X,Y,X):-X>Y,!.
mayor(_,Y,Y).
%implementamos estos predicados, ya que nos seran de ayuda
%en los siguientes ejercicios.

%predicado que en encuentra el menor de una lista.
menor([X],X):-!.
%si la lista tiene un solo elemento, el menor es el mismo
%y termina la ejecucion, gracias al Corte.(!).
menor([X|L1],Me):-menor(L1,Me1),menor(X,Me1,Me).
%aplicando recursion, obtenemos el menor de la sublista L1, en Me1
%luego obtenemos el menor de X y Me1,en Me, utilizando el predicado
%de la linea 1.

%predicado que encuentra el mayor de una lista.
mayor([X],X):-!.
%Misma idea que el menor, si tiene un solo elemento, el mayor
%es él mismo.
mayor([X|L1],Ma):-mayor(L1,Ma1),mayor(X,Ma1,Ma).
%aplicando recursion, obtenemos el mayor de la sublista L1, en Ma1
%luego obtenemos el mayor entre el dato X y Ma1, en Ma.

%predicado que devuelve True si el dato X, esta en la Lista.
seEncuentra([],_).
seEncuentra([L,L1],X):-seEncuentra(L1,X);L=:=X.

%Predicado que encuentra la suma de los elementos de
%la lista en Sum.
suma([],0):-!.
suma([X],X):-!.
suma([X|L],Sum):-suma(L,Sum1),Sum is X+Sum1.

%Predicado que encuentra la cantidad de elementos
%de una lista
cantidad([],0):-!.
cantidad([_],1):-!.
cantidad([_|L],Cant):-cantidad(L,Cant1),Cant is Cant1+1.


%predicado que saca el promedio de los elementos de una lista
%en Prom
promedio([X],X):-!.
promedio(L,Prom):-suma(L,Sum),cantidad(L,C),Prom is Sum/C.

%predicado que es True,si los elementos de la lista estan
%ordenados en forma ascedente o descendente.
sacarPrimerEle([L|_],L).
%predicado saca el primer elemento de la lista.
ordAsc([_]):-!.
ordAsc([L|L1]):-ordAsc(L1),sacarPrimerEle(L1,R),L<R.
ordDesc([_]):-!.
ordDesc([L|L1]):-ordDesc(L1),sacarPrimerEle(L1,R),L>R.
%predicados necesarios nuestro predicado final
ordenado(L1):-ordAsc(L1),!;ordDesc(L1).

%predicado que encuentra la frecuencia en "F", de un elemento "X"
%en una lista
frecuencia([],_,0):-!.
frecuencia([L|L1],X,F):-frecuencia(L1,X,F1),L=:=X,F is F1+1,!.
frecuencia([_|L1],X,F):-frecuencia(L1,X,F).

%predicado que es True si los elementos de una lista
%son iguales
iguales([]).
iguales([_]):-!.
iguales([X,X|L1]):-iguales([X|L1]).

%predicado que encuentra la suma de los datos pares de una lista.
sumaPares([],0):-!.
sumaPares([X|L],Sum):-sumaPares(L,Sum1),(X mod 2)=:=0,Sum is Sum1+X,!.
sumaPares([_|L],Sum):-sumaPares(L,Sum).

%predicado que es True, si los elementos de una lista X, son pares.
puroPares([]).
puroPares([X|L]):-puroPares(L),(X mod 2)=:=0.

%predicado que encuentra la suma de los numeros primos en Sum
%de una lista X, antes vamos a ver como implementar el predicado
%que verifica si un numero es primo o no.
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).
sumaPrimos([],0).
sumaPrimos([X|L],Sum):-sumaPrimos(L,Sum1),primo(X),Sum is Sum1+X,!.
sumaPrimos([_|L],Sum):-sumaPrimos(L,Sum).

%predicado que es True, si todos los elementos de una
puroPrimos([X]):-primo(X),!.
puroPrimos([X|L]):-puroPrimos(L),primo(X).

Descargar Codigo Fuente (.pl).


Quizás tambien te interese: