2015-09-12 2 views

ответ

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 

В качестве альтернативы, 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 предназначен только для интерактивного использования.

+2

Почему вы говорите, что 'portray_clause/2' является предпочтительным, когда' listing (specific_pred/1) 'будет делать только то, что вам нужно? С помощью 'portray_clause' нужно больше обрабатывать вручную. – false

+1

@false Просто из-за той же самой причины, я думаю. Я всегда чувствовал, что 'listing/1' предназначен для использования на верхнем уровне (это как минимум я использую его). Если вы начинаете писать в файл, я просто предполагаю, что они делают более сложные вещи, чем взглянуть на определение предиката. Я исправлю свои формулировки. –

Смежные вопросы