/**********************************************************/
/* */
/* Universidad de Alicante */
/* */
/* LOGICA DE PRIMER ORDEN */
/* Prolog */
/* */
/* */
/* S.O. : MS-DOS (Windows) */
/* Interprete : SWI-Prolog */
/* Fichero : EJ06.PL */
/* */
/**********************************************************/
/*-- ESTRUCTURAS DE CONTROL : el corte --*/
/* sumatorio(Num,Sum) <- Sum es el sumatorio desde 1 hasta Num */
sumatorio(1,1) :- !.
sumatorio(N,S) :- N1 is N-1,
sumatorio(N1,S1),
S is N+S1.
natural(0).
natural(X) :- natural(Y),
X is Y+1.
/* diventera(Dividendo,Divisor,Cociente) <- Cociente es el resultado
diventera(A,B,C) :- natural(C),
Y1 is C*B,
Y2 is (C+1)*B,
Y1=<A, Y2>A, !.
dando lugar a la lista L3 */
concatena([],L,L) :- !.
concatena([X|L1],L2,[X|L3]) :- concatena(L1,L2,L3).
/* borrar(Elem,L1,L2) <- L2 es la lista resultado de borrar todas las
ocurrencias del elemento Elem de la lista L1 */
borrar(_,[],[]).
borrar(E,[E|L1],L2) :- !,borrar(E,L1,L2).
borrar(E,[A|L1],[A|L2]) :- borrar(E,L1,L2).
/* sust(E1,E2,L1,L2) <- L2 es la lista resultado de sustituir en la lista
L1 todas las ocurrencias del elemento E1 por E2 */
sust(_,_,[],[]).
sust(E1,E2,[E1|L1],[E2|L2]) :- !, sust(E1,E2,L1,L2).
sust(E1,E2,[Y|L1],[Y|L2]) :- sust(E1,E2,L1,L2).
listas-conjuntos L1 y L2 */
union([],L,L).
union([X|L1],L2,L3) :- miembro(X,L2), !,
union(L1,L2,L3).
union([X|L1],L2,[X|L3]) :- union(L1,L2,L3).
/* PREGUNTAS :
?- concatena([a,b,c],[d,e],X).
?- concatena([a,b,c],X,[a,b,c,d,e]).
?- concatena(X,Y,[a,b,c]).
?- borrar(a,[a,b,c,d,a,b,a,d],L).
?- sust(a,b,[a,b,c,d,a,b],L).
?- union([a,b,c],[a,d,f,b],L).
*/