Problema con matriz en Prolog

Roberto Borbolla
21 de Noviembre del 2014
Buenas tardes amigos, ¿alguien me podría orientar en el siguiente programa?

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

Carlos
12 de Agosto del 2026

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