/*
  borrar(X,L,R).

  Predicado que comprueba R es la lista que se obtiene al borrar todas las apareciones de X en la lista L

  Argumentos
  + X:
    - Significado: elemento
    - Tipo: entrada y salida
  + L:
    - Significado: lista de elementos
    - Tipo: entrada y salida

  + R:
    - Significado: lista de elementos
    - Tipo: entrada y salida

  Variables locales
  + Cola1:
    - Significado: lista de elementos
  + Cola2:
    - Significado: lista de elementos
*/


 borrar(_,[],[]).
 
 borrar(X,[X|Cola1],Cola2):- 
 					borrar(X,Cola1,Cola2).
 					
 borrar(X,[Y|Cola1],[Y|Cola2]):- 
                    not(X = Y),
 					borrar(X,Cola1,Cola2).
 					
 					
/*
  borrar_bis(X,L,R).

  Predicado que comprueba R es la lista que se obtiene al borrar todas las apareciones de X en la lista L

  Nota: se utiliza el corte "!" en vez de la negación

  Argumentos
  + X:
    - Significado: elemento
    - Tipo: entrada y salida
  + L:
    - Significado: lista de elementos
    - Tipo: entrada y salida

  + R:
    - Significado: lista de elementos
    - Tipo: entrada y salida

  Variables locales
  + Cola1:
    - Significado: lista de elementos
  + Cola2:
    - Significado: lista de elementos
*/
 
 borrar_bis(_,[],[]):- !.
 
 borrar_bis(X,[X|Cola1],Cola2):- !,
 				borrar_bis(X,Cola1,Cola2).
 					
 borrar_bis(X,[Y|Cola1],[Y|Cola2]):- 
       			   borrar_bis(X,Cola1,Cola2).
