Domanda

Ho fatto un piccolo codice per creare una matrice di coordinate (come una scacchiera), è il seguente:

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 prima volta che l'ho eseguito è andato bene, ma quando ho incrementato le dimensioni della matrice, i "punti" alla fine della matrice iniziano ad apparire incrementare una coordinata mentre la dimensione aumenta: Qualcuno ha qualche indizio perché ciò accade?

Grazie!

È stato utile?

Soluzione

Per impostazione predefinita, il loop Toplevel di SWI stampa i termini fino a profondità 10. Le parti più profonde vengono sostituite da ... è possibile estendere quella profondità o rimuovere quel limite impostando la profondità 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].
.

- Aggiornamento: nelle versioni più recenti di SWI, è necessario modificare un altro flag:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top