UTNianos

Versión completa: [Paradigmas] ¿Como "devolver" una lista sin elementos repetidos?
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.

generosQueToca(Musico,Generos) :- findall(Genero,cancion(_,Musico,Genero,_),Generos).

?- generosQueToca(beto,Generos).
Generos = [pop, pop, pop].



Quiero que me "devuelva"


Generos = [pop].



Con un setof en lugar del findall andaría pero en el caso:


?- generosQueToca(mozart,Generos).


con setof me "devuelve"

Generos = [clasico]
Generos = [rock]



y quiero que me devuelva:

Generos =[clasico, rock].



No se como hacerlo por favor es urgente xD

Gracias
No recuerdo muy bien pero no tenias que hacer algo asi como :

generosQueToca(Musico,Generos) :-
esMusico(Musico),
findall(Genero,cancion(_,Musico,Genero,_),Generos).

??

Fijate eso, espero no haber mandado fruta

esMusico(M):- "aca fijate tu base de conocimientos, ponele qe sea algo asi como musico(M). "
(07-10-2011 14:08)gusti89 escribió: [ -> ]No recuerdo muy bien pero no tenias que hacer algo asi como :

generosQueToca(Musico,Generos) :-
esMusico(Musico),
findall(Genero,cancion(_,Musico,Genero,_),Generos).

??

Fijate eso, espero no haber mandado fruta

esMusico(M):- "aca fijate tu base de conocimientos, ponele qe sea algo asi como musico(M). "

No me refiero a eso... eso es un predicado generador, pero no me sirve para que la lista Generos, no tenga elementos repetidos.
Te sirve esto?



sinRepeticion([X],[X]).
sinRepeticion([X|XS],[X|ListaSinRepetidos]):- not(member(X,XS)),sinRepeticion(XS,ListaSinRepetidos).
sinRepeticion([X|XS],ListaSinRepetidos):- member(X,XS),sinRepeticion(XS,ListaSinRepetidos).


generosQueToca(Musico,GenerosSinRepetidos) :- findall(Genero,cancion(_,Musico,Genero,_),Generos),sinRepeticion(Generos,GenerosSinRepetidos).



Si anirus gracias, pude hacerlo pero tu solucion es mas simple!
Ahh cierto, era con sinRepetidos! lo primero qe se me vino a la mente era eso qe te dije, perdon!!
URLs de referencia