Turn off swi-prolog protocol output of ANSI terminal control sequences

时间:2022-03-09 00:17:32

 To save a record of program execution in prolog, we use the special predicates: protocol and noprotocol. Like this:

 

protocol(‘execution.txt’).

 

noprotocol.

 

All the queries and their responses between the protocol and noprotocol will be saved to this file.

 

If we use these predicates, we will get records like this:

 

11 ?- beside(block2, X).

X = block3  [1m;[0m

[1;31mfalse.[0m

 

12 ?- beside(block4, X).

X = block7  [1m;[0m

X = block3  [1m;[0m

[1;31mfalse.[0m

 

The characters [1m [0m looks like garbage characters but they are ANSI terminal codes. We can get the reference from here: 

http://wiki.bash-hackers.org/scripting/terminalcodes

 

As we can see from the link above, [0m refers to reset all attributes and [1m refers to set bright attribute.

 

If we want to disable these codes, we can use predicate: set_prolog_flag(color_term, false). before starting the protocol session.