Hola, acá te lo paso, esto funciona bien, la idea era usar "ordenar" antes de comparar las listas pero no vi como se hace para strings, asi que hice el comparar sintomas mas "chancho" pero funciona, je. Por ejemplo tirás un
diagnosticar(E,[dolor,fiebre,nauseas]). y te da un E = empachado, o sea, no importa el orden en que metas los sintomas, tiene que funcionar
decime si te falta algo más, slaudos y buen 2011!
%retorna la longitud de una lista
long([],0):-!.
long([X|M],V):-long(M,B),!, V is B + 1.
%verifica si un valor pertence a la lista
pertenece(X,[X|L]):-!.
pertenece(X,[M|L]):-pertenece(X,L).
%sintomasiguales verifica que dos listas son iguales
sintomasiguales_([],M).
sintomasiguales_([X|L],M):-pertenece(X,M),sintomasiguales_(L,M).
sintomasiguales(L,M):-long(L,LL),long(M,ML),ML = LL,sintomasiguales_(L,M).
sintomasiguales1(L,M):-ordenar(L,L1),ordenar(M,M1),iguales(L1,M1).
diagnosticar(E,L):-enfermedad(E,M), sintomasiguales(L,M),!.
enfermedad(empachado,[fiebre,dolor,nauseas]).