% 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]):-!.