我在Prolog中遇到一个问题,即在文件中添加新的事实' relations.pl'。每次我得到事实我都会保存它们并使用
tell('relations.pl').
listing(relation).
told.
唯一的问题是我想插入新的事实,并避免存储相同的事实,如果有的话。
有没有这样做? 谢谢,
答案 0 :(得分:1)
说out_tofile(listing(relation),'relation.pl').
有点健壮。文本文件的唯一就地操作是向它们添加新文本。我不能在这推荐这样做。对于日志文件,附加会很好。
:- meta_predicate
out_tofile(0,+), % out_tofile(:,+) in older versions
out_ontofile(0,+), % idem
out_tostream__andclose(0,+). % idem
out_tofile(Goal, File) :-
open(File,write,Stream),
out_tostream__andclose(Goal, Stream).
out_ontofile(Goal, File) :-
open(File,append,Stream),
out_tostream__andclose(Goal, Stream).
out_tostream__andclose(Goal, Stream) :-
current_output(Stream0),
call_cleanup((set_output(Stream),once(Goal)), set_output_close(Stream0, Stream)).
set_output_close(Stream0, Stream) :-
set_output(Stream0),
close(Stream).