/*
 * 01-ultimo.pl
 *
 * Defina un predicado ultimo/2 que calcule el último elemento de
 * una lista no vacia
 *
 * ejecutar desde el shell con el siguiente mandato:
 * gprolog --entry-goal "consult('01-ultimo.pl')" --query-goal 'pruebas'
 */

p1_lista_vacia_falla :- \+(ultimo([], _)).

p2_atomo_falla:- \+(ultimo(atomo, _)).

p3_lista_unitaria :- ultimo([unico], Ultimo),
	Ultimo = unico.

p4_lista_general :- ultimo([uno, dos], Ultimo),
	Ultimo = dos.

pruebas :-
	p1_lista_vacia_falla,
	p2_atomo_falla,
	p3_lista_unitaria,
	p4_lista_general,
	paso('todo'), !.

pruebas :- fallo.

paso(Msg)  :- msg(paso,Msg), !.
fallo(Msg) :- msg(fallo,Msg), !.
fallo      :- msg(fallo,''), !.
msg(paso, Msg) :- write('Paso: '), write(Msg), nl.
msg(fallo, '') :- write('Fallo algo.'), nl.
msg(fallo, Msg) :- write('Fallo: '), write(Msg), nl.

ultimo([X], X).
ultimo([X|Xs], Y) :- ultimo(Xs,Y).

/* EOF 01-ultimo.pl */
