sten
sten

Reputation: 7476

Redirecting standard output stream

How do I write the output of listing/0 in SWI-Prolog REPL to a file ?

?- listing > file.txt.

Upvotes: 3

Views: 785

Answers (1)

user1812457
user1812457

Reputation:

You can open a file for writing and redirect current_ouput to it like this:

?- current_output(Orig), % save current output
   open('file.txt', write, Out),
   set_output(Out),
   listing,
   close(Out),
   set_output(Orig). % restore current output

Alternatively, SWI-Prolog provides a predicate with_output_to/2 which can be used to redirect the current output for one goal. Make sure to read the documentation, but in short:

?- open('file.txt', write, Out),
   with_output_to(Out, listing),
   close(Out).

Now the output of listing/0 will be written to file.txt. But keep in mind that there is going to be a whole lot of stuff in there. You maybe want to use listing/1 for specific predicates? In this case, using clause/2 and portray_clause/2 is another option, especially if you want more control over what and how you are writing to the file. listing is meant only for interactive use I guess.

Upvotes: 8

Related Questions