donante(persona(rodrigo,lara,silva),0,negativo).
donante(persona(ana,lara,silva),0,negativo).

donante(persona(juan,campos,ruiz),0,positivo).
donante(persona(amelia,campos,ruiz),0,positivo).

donante(persona(natalia,luna,pachecho),a,negativo).
donante(persona(luis,luna,pachecho),a,negativo).

donante(persona(pablo,aguirre,torres),a,positivo).
donante(persona(alicia,aguirre,torres),a,positivo).

donante(persona(laura,larra,siles),b,negativo).
donante(persona(hugo,larra,siles),b,negativo).

donante(persona(pedro,parra,puentes),b,positivo).
donante(persona(patricia,parra,puentes),b,positivo).

donante(persona(isabel,duarte,salazar),ab,negativo).
donante(persona(ignacio,duarte,salazar),ab,negativo).

donante(persona(teresa,aguilera,soto),ab,positivo).
donante(persona(ismael,aguilera,soto),ab,positivo).

donantes_ordenados_por_grupo_y_factor(Grupo,Factor,L):-
     setof(Persona,donante(Persona,Grupo,Factor),L).

donantes_ordenados_por_grupo(Grupo,L):-
     setof(Persona,Factor^donante(Persona,Grupo,Factor),L).
     
donantes_por_grupo(Grupo,L):-
     bagof(Persona,Factor^donante(Persona,Grupo,Factor),L).
     
     
donantes(L):-
     findall(Persona,donante(Persona,_,_),L).
     
