Entrada: Meter 3 sublistas que representen a una matriz de 3x3, donde cada sublista es cada fila de la matriz
3, 76, 1
21, 43, 6
15, 4, 2
Salida1: Debe de salir ordenada por fila
1, 3, 76
6, 21, 43
2, 4, 15
Salida2: De la matriz resultante en Salida1, debe de ordenarse ahora por columnas:
1, 3, 15
2, 4, 43
6, 21, 76
Espero que me haya dado a entender, la verdad soy un aprendiz en prolog y apenas estoy comprendiendo elementos básicos como recursividad y manejo de listas, espero puedan ayudarme con alguna idea de como implementarlo.
Saludos
Para ordenar cada fila (cada sublista) de tu matriz de 3x3, no necesitas escribir el ordenamiento a mano, Prolog ya trae predicados de orden. La forma más directa es combinar maplist/3 (aplica un predicado a cada elemento de una lista) con msort/2 (ordena una lista):
ordenar_filas([], []).
ordenar_filas(Matriz, MatrizOrdenada) :-
maplist(msort, Matriz, MatrizOrdenada).
Con tu ejemplo:
?- ordenar_filas([[3,76,1],[21,43,6],[15,4,2]], R).
R = [[1,3,76],[6,21,43],[2,4,15]].
Un detalle importante: usa msort/2 y no sort/2. sort/2 además de ordenar elimina duplicados, mientras que msort/2 mantiene todos los elementos (incluidos repetidos) y solo los reordena. Si tu matriz puede tener números repetidos en la misma fila, sort/2 te daría una fila con menos elementos de los que tenía, que probablemente no es lo que quieres.
Carlos