PDA

View Full Version : impostare colori al write prolog


musica1000w
26-08-2014, 17:48
Ciao a tutti! sto cercando di creare un semplice programmino in prolog, premetto che sono praticamente a zero, sto consultando diversi esempi ma nessuno è riuscito a soddisfare la mia esigenza. In pratica vorrei che durante l'esecuzione del programma mi dia la possibilità di stampare delle scritte colorate. Per ora riesco solo a stampare tutto in nero, che credo sia il colore di default, vorrei però poter impostare diversi parametri della stampa, in particolare il colore e il grassetto. Per esempio vorrei stampare:
prova :- write('ciao')
ma la parola ciao deve essere stampata in rosso ed in grassetto.
ho letto forse che si ha la necessità in alcuni casi delle librerie, ma come si caricano? e quali sono quelle per questa funzione?
grazie in anticipo a tutti!

oNaSsIs
27-08-2014, 11:27
Ho provato e funziona. link (http://www.swi-prolog.org/pldoc/man?predicate=ansi_format/3)
?- ansi_format([bold,fg(red)], 'Hello ~w', [world]).

musica1000w
27-08-2014, 14:28
Si avevo letto questo articolo, ma non sono stato capace ad impostarlo nel mio write....

oNaSsIs
29-08-2014, 10:38
Ma ora sei riuscito a risolvere?

musica1000w
31-08-2014, 09:27
No non ci sono riuscito, il fatto i utilizzare colori differenti nel write mi serve per rendere meno monotono lo script del tris a cui hai risposto, in pratica dove c'è scritto:

printsquare(N) :- o(N), write(' o ').
printsquare(N) :- x(N), write(' x ').
printsquare(N) :- empty(N), write(' ').


per esempio al segno "o" assegnare il colore rosso e al segno "x" quello blu. Purtroppo non riesco a farlo, ho cercato sull'help ma l'unica cosa che ho trovato è quella che hai segnalato precedentemente, ma non so come sostituirlo in questo caso.

oNaSsIs
01-09-2014, 13:50
Questo codice dovrebbe fare quello che vuoi tu. Purtroppo però non sono sicuro che non si possa scrivere meglio. :/


o(1).
x(2).

printColored(N) :-
o(N), !,
ansi_format([bold,fg(blue)], N, [ ]).
printColored(N) :-
x(N),
ansi_format([bold,fg(red)], N, [ ]).

musica1000w
02-09-2014, 08:50
Dire che il tuo aiuto è stato prezioso è dire poco! Funziona, ma per adattarlo meglio alle mie esigenze, in modo da non sfalsare la griglia e che escano i segni o e x al posto dei numeri ho cosi modificato:

printsquare(N) :- o(N), ansi_format([bold,fg(blue)], ' o ', [ ]).
printsquare(N) :- x(N), ansi_format([bold,fg(red)], ' x ', [ ]).


Solo che non capisco a cosa servano le parentesi quadre alla fine...

Ho un'altra domanda,l'ultima, da fare sempre su questo script...posso postare qui o posto sull'altro?
Grazie ancora!

musica1000w
02-09-2014, 10:32
Ho scritto la mia ultima domanda nell'altra discussione di questo script spero tu possa darne un'occhiata, grazie!

oNaSsIs
02-09-2014, 14:38
Solo che non capisco a cosa servano le parentesi quadre alla fine...
!
Mi spiace ma non so come aiutarti. La funzione prende una lista di argomenti eventualmente da stampare anche quelli, ma non so perché sia implementata così. Come ti ho detto non sono molto esperto di Prolog.

musica1000w
03-09-2014, 11:23
Non sarai esperto ma sicuramente sai molto di più del sottoscritto, e mi hai aiutato tantissimo, quindi un grazie è anche riduttivo!