/*
  borrar(X,L,R).

  Predicado que comprueba R es la lista que se obtiene al borrar X de 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(X,[X|Cola],Cola).

borrar(X,[Y|Cola1],[Y|Cola2]):- borrar(X,Cola1,Cola2).



/*
  pertenece(X,L).

  Predicado que comprueba si X pertenece a una lista L: X pertenece a L si se puede borrar de L

  Argumentos
  + X:
    - Significado: elemento
    - Tipo: entrada y salida
  + L:
    - Significado: lista de elementos
    - Tipo: entrada y salida

  Predicado relacionado
   borrar
*/
pertenece(X,L):- borrar(X,L,_).



/*
  insertar(X,L,R).

  Predicado que comprueba si X ha sido insertado en la lista L para obtener R: X se puede insertar en L si puede borrar de R

  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

  Predicado relacionado
   borrar
*/
insertar(X,L,R):-borrar(X,R,L).
