Ваше определение safe_to_file / 1 более безопасно, используя open/3
и close/1
.В противном случае прерывания или ошибки, возникающие во время листинга / 0, оставят поток открытым, что позволит другим частям случайно записать в тот же файл.Итак,
save_to_file(File) :-
open(File,write,Stream),
with_output_to(Stream, listing),
close(Stream).
безопаснее.Теперь только записи могут писать в этот файл.with_output_to/2
относится к SWI, YAP.
Чтобы вернуться к вашему вопросу, в большинстве ситуаций portray_clause (Stream, Term) будет именно тем, что вам действительно нужно.