/*
 * 05-concatenacion.pl
 *
 * Defina un predicado para calcular la concatenacion de los elementos
 * de una lista de listas.
 *
 * ejecutar desde el shell con el siguiente mandato:
 * gprolog --entry-goal "consult('05-concatenacion.pl')" --query-goal 'pruebas'
 */

p1_lista_lista_vacia :- concatenacion([[]],X), X = [].
p2_lista_lista_unitaria :- concatenacion([[uno]],X), X = [uno].
p3_lista_listas_comunes :- concatenacion([[unoa,unob,unoc],[dosa],[tresa,tresb]], X),
				X = [unoa,unob,unoc,dosa,tresa,tresb].
p4_listas_anidadas :- concatenacion([[a,[b,c],d],[e],[],[f,[g,h,i],[j,k]]], X),
				X = [a,[b,c],d,e,f,[g,h,i],[j,k]].

pruebas :-
	p1_lista_lista_vacia,
	p2_lista_lista_unitaria,
	p3_lista_listas_comunes,
	p4_listas_anidadas,
	paso('todo'), !.
pruebas :- fallo.

paso(Msg)  :- msg(paso,Msg), !.
fallo(Msg) :- msg(fallo,Msg), !.
fallo      :- msg(fallo,''), !.
msg(paso, Msg) :- write('Paso: '), write(Msg), nl.
msg(fallo, '') :- write('Fallo algo.'), nl.
msg(fallo, Msg) :- write('Fallo: '), write(Msg), nl.



concatenacion([],[]).

concatenacion([X|Xs],Z) :-
	concatenacion(Xs,Y),
	append(X,Y,Z).

/* EOF 05-concatenacion.pl */
