重定向标准输出流

ste*_*ten 1 file-io prolog prolog-toplevel

如何将listing/0SWI-Prolog REPL 的输出写入文件?

?- listing > file.txt.
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以打开一个文件进行编写并重定向current_ouput到它,如下所示:

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

或者,SWI-Prolog提供一个谓词with_output_to/2,可用于将当前输出重定向到一个目标.请务必阅读文档,但简而言之:

?- open('file.txt', write, Out),
   with_output_to(Out, listing),
   close(Out).
Run Code Online (Sandbox Code Playgroud)

现在输出listing/0将被写入file.txt.但请记住,那里会有很多东西.您可能想要listing/1用于特定谓词?在这种情况下,使用clause/2portray_clause/2是另一种选择,特别是如果您想要更多地控制写入文件的内容和方式.listing仅用于交互式使用我猜.

  • 为什么你说`portray_clause/2`是首选,当`listing(specific_pred/1)`只做你想做的事情?使用`portray_clause`需要手动处理更多内容. (2认同)