/*
  permutar(L,P)

  Predicado que comprueba si P es una permutación de la lista L

  Argumentos
  + L:
    - Significado: lista de elementos
    - Tipo: entrada y salida

  + P:
    - Significado: lista de elementos
    - Tipo: entrada y salida

 Variables locales
 + Cabeza:
    - Significado: elemento
 + Cola:
    - Significado: lista de elementos
 + Cola_permutada:
    - Significado: lista de elementos

  Predicado relacionado
   incluir_al_final
*/
permutar([],[]).

permutar([Cabeza|Cola],P):-
		permutar(Cola,Cola_permutada),
	        insertar(Cabeza,Cola_permutada,P).



/*
  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).


/*
  insertar(X,L,R).

  Predicado que comprueba si R es una lista compuesta por una lista L y un elemento X.

  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).
