% PRACTICA 4 
%***************************************************************
%***************************************************************
% EJERCICIO 1:
% Definir el predicado
%                           suma_pares(L,N)
% que toma como dato de entrada la lista de n\'umeros enteros L 
% y devuelva la suma (N) de todos los n\'umeros pares que 
% aparezcan en L. Ejemplo de uso:
%
%    ?- suma_pares([2,3,4],N).
%       N = 6 ;
%       No
%
%    ?- suma_pares([1,3,5,6,9,11,24],N).
%       N = 30 ;
%       No
%
%***************************************************************

%***************************************************************
% EJERCICIO 2: 
% Definir el predicado
%                        acumula(L1,L2)
% que toma como dato de entrada una lista de n\'umeros 
% L1 = [n1,n2,n3,...,nm] y devuelve la lista 
% L2 = [s1, s2, ... , sm] donde
%
%          s1 = n1 + n2 + n3 + ... + n(m-1) + nm
%          s2 =      n2 + n3 + ... + n(m-1) + nm
%                 ...             ...
%                 ...             ...
%          s(m-1) =                  n(m-1) + nm               
%          sm =                               nm 
% 
% Ejemplo de uso:
%
%    ?- acumula([1,2,3,4],L).
%       L = [10, 9, 7, 4] ;
%       No
%***************************************************************

%***************************************************************
% EJERCICIO 3: 
% Definir el predicado
%                          union_varias(L1,L2)
% que tome como dato de entrada una lista cuyos elementos son 
% listas L1 =[l1,l2,...,ln] y devuelva la lista L2 formada por 
% todos los elementos que pertenecen a alguna lista de L1
%         Ejemplo de uso
%
%    ?- union_varias([[1,2,3],[2,4,6],[23,56,7,3]],L).
%       L = [1, 2, 3, 2, 4, 6, 23, 56, 7, 3]        
%
%       ?- union_varias([],L).
%       L = [] 
%***************************************************************

%***************************************************************
% EJERCICIO 4:
% Llamaremos terna pitag\'orica a una lista [X,Y,Z] formada por 
% tres n\'umeros enteros positivos X, Y, Z tales que
% (a) X sea menor o igual que Y e Y sea menor o igual que Z
% (b) X al cuadrado m\'as Y al cuadrado sea igual a Z al cuadrado.
% As\'i, la lista [3,4,5] es un terna pitag\'orica, pero las 
% listas [4,3,5] y [0,2,2] no lo son.
% Definir el predicado
%                           ternas(N,L)
% que toma como dato de entrada el entero positivo N y devuelve 
% la lista L formada por todas las ternas pitag\'oricas [X,Y,Z] 
% formadas por n\'umeros menores o iguales a N
%   Ejemplo de uso:
%
%             ?- ternas(12,L).
%                L = [[3, 4, 5],[6,8,10]] ;
%                No
%
%             ?- ternas(15,L).
%                L = [[3, 4, 5], [5, 12, 13], 
%                     [6, 8, 10],[9,12,15]] ;
%                No
%
%***************************************************************

%***************************************************************
% EJERCICIO 5:
% Definir el predicado
%               lista_simb_arg(L1,L2,L3)
% que tome como dato de entrada una lista cuyos elementos son 
% t\'erminos formados por un s\'imbolo de funci\'on y una 
% constante y devuelva las listas L2 y L3. L2  estar\'a formada 
% por los s\'imbolos de funci\'on de los t\'erminosde L1 (en el 
% mismo orden) y L3 por las constantes de los t\'erminos de L1 
% (en el mismo orden)
% 
%         Ejemplo de uso
%
%         ?- lista_simb_arg([f(a),g(b),h(c)],L_simb,L_arg).
%            L_simb = [f, g, h]
%            L_arg = [a, b, c] 
%
%         ?- lista_simb_arg([],L_simb,L_arg).
%            L_simb = []
%            L_arg = [] 
%***************************************************************

%***************************************************************
% EJERCICIO 6:
% Definir la relacion
%         plural(Singular,Plural)
% que toma como entrada la palabra Singular y devuelve la 
% palabra Plural. Ejemplo de uso:
%
%        ?- plural(hoja,Plural).
%           Plural = hojas ;
%           No
%        ?- plural(angel,Plural).
%           Plural = angeles ;
%           No
%***************************************************************

%***************************************************************
% EJERCICIO 7:
% Definir el predicado 
%            hanoi(N,A,B,C)
% que tome como entrada un entero no negativo N y los nombres 
% para tres postes (izq, cen y der, por ejemplo) de forma que 
% el segundo argumento "A" sea el poste donde estan los discos 
% en la posicion inicial, el tercer argumento "B" sea el poste 
% auxiliar y el cuarto argumento "D" sea el poste donde est\'an 
% los discos en el estado final. El predicado debe dar como 
% salida un movimiento en cada l\'inea, como se ve en el ejemplo.
%  Ejemplo de uso:
%        ?- hanoi(3,izq,cen,der).
%             pasa de izq a der
%             pasa de izq a cen
%             pasa de der a cen
%             pasa de izq a der
%             pasa de cen a izq
%             pasa de cen a der
%             pasa de izq a der
%           Yes
%*************************************************************************

