una recorrer programacion listas lista leer funciones fuente ejemplo descomponer conocimiento codigo matrix prolog coordinates prolog-toplevel

matrix - recorrer - programacion en prolog



Por qué "..." aparece en mi respuesta de matriz en Prolog (1)

Hice un pequeño código para crear una matriz de coordenadas (como un tablero de ajedrez), es el siguiente:

createMatrix(N,M,R) :- creaMatriu(N,M,A), reversed(R,A). creaMatriu(N,0,[T]) :- creafila(N,0,T),!. creaMatriu(N,M,[T|C]) :- creafila(N,M,T), M1 is M-1, creaMatriu(N,M1,C). creafila(0,M,[[M,0]]):-!. creafila(N,M,[[M,N]|C]) :-N1 is N-1,creafila(N1,M,C). reversed(A, B) :- reversed(B, [], A). reversed([A|B], C, D) :- reverse(N,A),reversed(B, [N|C], D). reversed([], A, A).

La primera vez que lo ejecuté fue bien, pero cuando incrementé las dimensiones de la matriz, los "puntos" al final de la matriz comienzan a aparecer incrementando una coordenada a medida que la dimensión aumenta, como esta:

?- createMatrix(1,1,R). R = [[[0, 0], [0, 1]], [[1, 0], [1, 1]]] . ?- createMatrix(2,1,R). R = [[[0, 0], [0, 1], [0, 2]], [[1, 0], [1, 1], [1, 2]]] . ?- createMatrix(2,2,R). R = [[[0, 0], [0, 1], [0, 2]], [[1, 0], [1, 1], [1, 2]], [[2, 0], [2, 1], [2, 2]]] . ?- createMatrix(3,2,R). R = [[[0, 0], [0, 1], [0, 2], [0, 3]], [[1, 0], [1, 1], [1, 2], [1, 3]], [[2, 0], [2, 1], [2, 2], [2, 3]]] . ?- createMatrix(3,3,R). R = [[[0, 0], [0, 1], [0, 2], [0, 3]], [[1, 0], [1, 1], [1, 2], [1, 3]], [[2, 0], [2, 1], [2, 2], [2, 3]], [[3, 0], [3, 1], [3, 2], [3|...]]] . ?- createMatrix(4,3,R). R = [[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4]], [[1, 0], [1, 1], [1, 2], [1, 3], [1, 4]], [[2, 0], [2, 1], [2, 2], [2, 3], [2|...]], [[3, 0], [3, 1], [3, 2], [3|...], [...|...]]] . ?- createMatrix(4,4,R). R = [[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4]], [[1, 0], [1, 1], [1, 2], [1, 3], [1, 4]], [[2, 0], [2, 1], [2, 2], [2, 3], [2|...]], [[3, 0], [3, 1], [3, 2], [3|...], [...|...]], [[4, 0], [4, 1], [4|...], [...|...]|...]] .

Alguien tiene alguna pista de por qué sucede esto?

¡Gracias!


De forma predeterminada, el bucle de nivel superior de SWI imprime términos hasta la profundidad 10. Las partes más profundas se reemplazan por ... Puede ampliar esa profundidad o eliminar ese límite estableciendo la profundidad en 0.

?- length(L,10). L = [_G317, _G320, _G323, _G326, _G329, _G332, _G335, _G338, _G341|...]. ?- current_prolog_flag(toplevel_print_options,V). V = [quoted(true), portray(true), max_depth(10), spacing(next_argument)]. ?- set_prolog_flag(toplevel_print_options, [quoted(true), portray(true), max_depth(0), spacing(next_argument)]). true. ?- length(L,10). L = [_G320, _G323, _G326, _G329, _G332, _G335, _G338, _G341, _G344, _G347].

- actualización: en las versiones más nuevas de SWI, se debe cambiar otra bandera:

?- current_prolog_flag(T,V), atom_concat(_,options,T). T = answer_write_options, V = [quoted(true), portray(true), max_depth(10), spacing(next_argument)] . ?- set_prolog_flag(answer_write_options, [quoted(true), portray(true), max_depth(0), spacing(next_argument)]). true.