
/*
 * pertenece(X,L) comprueba si X pertenece a L
 *
 */

 
pertenece(X,[X|_]).
pertenece(X,[_|L]):-pertenece(X,L).



/*
 * comunes(L1,L2,R) genera una lista R que contiene los elementos comunes a L1 y L2
 * Se utiliza la negación
 *
 */


comunes([],_,[]).

comunes([X|L1],L2,[X|R]):- 
			pertenece(X,L2), 
			comunes(L1,L2,R).

comunes([X|L1],L2,R):- 
			not(pertenece(X,L2)), 
			comunes(L1,L2,R).


/*
 * comunes_bis(L1,L2,R) genera una lista R que contiene los elementos comunes a L1 y L2
 * Se utiliza el corte
 *
 */

comunes_bis([],_,[]).

comunes_bis([X|L1],L2,[X|R]):- 
			pertenece(X,L2), 
			!, 
			comunes_bis(L1,L2,R).

comunes_bis([_|L1],L2,R):- 
			comunes_bis(L1,L2,R).
