%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). |