Ej06.pro



/**********************************************************/
/*                                                        */
/*  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).

*/