Prólogo de ordenación simple

En Prolog, lo que tengo ahora es,

:-dynamic listofPeople/2.
listofPeople(Mark,Name).

que básicamente contiene la nota de cada alumno.

Quiero imprimir las mejores 3 marcas.

Para hacer eso, creo que tengo que hacer la clasificación. Si ordeno, perderé el orden del nombre del alumno.

Como puede entender por defecto, lo que quiero es ordenar solo las marcas y ordenar los nombres de acuerdo con las marcas también.

Por favor ayuda. Fragmentos de código apreciados.

preguntado el 03 de mayo de 12 a las 16:05

1 Respuestas

Puede comenzar creando una lista de pares clave-valor, ordenarla e imprimir las 3 calificaciones principales.

go(G1,G2,G3) :- findall(Grade-Name, listofPeople(Grade,Name), List), 
                 keysort(List, [G1-_,G2-_,G3-_|SortedList]).

El predicado falla si tiene menos de tres calificaciones.

Si además de calificaciones quieres tener nombres:

go(N1-G1,N2-G2,N3-G3) :- findall(Grade-Name, listofPeople(Grade,Name), List), 
                 keysort(List, [G1-N1,G2-N2,G3-N3|SortedList]).

contestado el 03 de mayo de 12 a las 18:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.