animales.pro



% correr el programa con start.

animales([perro]).
datos([[ladra, peludo]]).

start:-
	animales(LAnim), datos(LDatos),
	inicia(LAnim, LDatos).

inicia(LAnim, LDatos):-
	write('Introduce el nombre de un animal: '),
	readln(AnimalNuevo),
	procesa(LAnim, LDatos, AnimalNuevo, LANew, LDNew), !,
	inicia(LANew, LDNew).
inicia(_, _):-!.

procesa(_, _, [fin], [], []):- !, fail.
procesa(LAnim, LDatos, [AnimNew], LAnim, LDatos):-
	existe(LAnim, LDatos, AnimNew, Datos),
	muestra(Datos).
procesa(LA, LD, [Animal], LANew, LDNew):-
	unir(LA, [Animal], LANew),
	pideDatos([], LDatos),
	unir(LD, [LDatos], LDNew), !.

pideDatos(Li, Lf):-
	write('Introduce un dato: '),
	readln(Dato),
	noEsFin(Dato),
	unir(Li, Dato, LNew), !,
	pideDatos(LNew, Lf).
pideDatos(Lista, Lista):-!.

noEsFin([fin]):- !, fail.
noEsFin(_):- !.

%No existe y pide datos
existe([], _, _, []):- !, fail.
%Si estA
existe([Animal|_], [Datos|_], Animal, Datos):-!.
%Sigue buscando
existe([_|LA], [_|LD], Animal, Datos):-
	!, existe(LA, LD, Animal, Datos).

muestra([]):-!.
muestra([Head|Tail]):-
	writeln(Head), !, muestra(Tail).

unir(Lista, [Elem], [Elem|Lista]):-!.