2011-02-11 7 views
6

hice un poco de código para crear una matriz de coordenadas (como un tablero de ajedrez), es la siguiente:Por qué "..." aparece en mi respuesta de la matriz en Prolog

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 ejecuté que iba bien, pero cuando incrementa las dimensiones de la matriz, los "puntos" al final de la matriz comienzan a aparecer incrementar una coordenada como la dimensión aumenta, como así:

?- 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 idea ¿Por qué sucede esto?

¡Gracias!

+0

la respuesta falsa por debajo le da una explicación detallada de los puntos suspensivos (...) en una pantalla por defecto de "nivel superior" consultas que Prolog contener variables no ligadas Su pregunta sugiere que la lista de listas es para representar una matriz 2D "como un tablero de ajedrez". Si ese es el caso, le resultará útil escribir un predicado de visualización personalizado. Las elipsis (...) no aparecerán si usa ** write/1 ** para mostrar un término de Prolog, y se puede lograr una apariencia más parecida a un tablero de ajedrez separando listas con nuevas líneas. – hardmath

Respuesta

7

Por defecto, el bucle de nivel más alto en términos SWI imprime hasta una profundidad de 10. partes más profundas son reemplazados por ... Puede extender esa profundidad o eliminar ese límite mediante el establecimiento de la profundidad a 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 nuevas versiones de SWI, otra bandera debe ser cambiado:

?- 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. 
Cuestiones relacionadas