Как написать вывод listing/0
в SWI-Prolog REPL в файл?Перенаправление стандартного выходного потока
?- listing > file.txt.
Как написать вывод listing/0
в SWI-Prolog REPL в файл?Перенаправление стандартного выходного потока
?- listing > file.txt.
Вы можете открыть файл для записи и перенаправить 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
В качестве альтернативы, SWI-Prolog обеспечивает предикат with_output_to/2
, который может быть использован для перенаправления выходного тока для одной цели , Убедитесь в том, чтобы читать документацию, но вкратце:
?- open('file.txt', write, Out),
with_output_to(Out, listing),
close(Out).
Теперь выход listing/0
будет записан в file.txt
. Но имейте в виду, что там будет много чего. Возможно, вы захотите использовать listing/1
для определенных предикатов? В этом случае использование clause/2
и portray_clause/2
- это еще один вариант, особенно если вы хотите больше контролировать, что и как вы пишете в файл. listing
предназначен только для интерактивного использования.
Почему вы говорите, что 'portray_clause/2' является предпочтительным, когда' listing (specific_pred/1) 'будет делать только то, что вам нужно? С помощью 'portray_clause' нужно больше обрабатывать вручную. – false
@false Просто из-за той же самой причины, я думаю. Я всегда чувствовал, что 'listing/1' предназначен для использования на верхнем уровне (это как минимум я использую его). Если вы начинаете писать в файл, я просто предполагаю, что они делают более сложные вещи, чем взглянуть на определение предиката. Я исправлю свои формулировки. –