/*
  extremos(L,R).

  Predicado que comprueba R es una lista compuesta por el primer y el último elemento de una lista L

  Nota: se usta el corte "!"

  Argumentos
  + L:
    - Significado: lista de elementos
    - Tipo: entrada y salida
  + R:
    - Significado: lista de dos elementos
    - Tipo: entrada y salida

  Variables locales
  + P:
    - Significado: primer elemento de L
  + U:
    - Significado: último elemento de L

  Predicados relacionados
  primero, ultimo
*/


extremos([],[]):-!.

extremos(L,[P,U]):-
           primero(L,P),
           ultimo(L,U).


/*
  primero(L,X).

  Predicado que comprueba X es el primer elemento o cabeza de la lista L

  Argumentos
  + L:
    - Significado: lista de elementos
    - Tipo: entrada y salida
  + X:
    - Significado:  elemento
    - Tipo: entrada y salida

  Predicados relacionados
  ultimo, extremos
*/
primero([X|_],X).


/*
  ultimo(L,X).

  Predicado que comprueba X es el último elemento de la lista L

  Nota: se usa el corte "!"

  Argumentos
  + L:
    - Significado: lista de elementos
    - Tipo: entrada y salida
  + X:
    - Significado:  elemento
    - Tipo: entrada y salida

  Predicados relacionados
  primero, extremos
*/

ultimo([X],X):-!.
ultimo([_|Cola],R):- ultimo(Cola,R).


