我在 Prolog 中遇到了关于向文件“relations.pl”添加新事实的问题。每次我得到事实时,我都会保存它们并使用
tell('relations.pl').
listing(relation).
told.
唯一的问题是我想插入新的事实并避免存储更多相同的事实(如果有的话)。
有没有办法做到这一点?谢谢,
我在 Prolog 中遇到了关于向文件“relations.pl”添加新事实的问题。每次我得到事实时,我都会保存它们并使用
tell('relations.pl').
listing(relation).
told.
唯一的问题是我想插入新的事实并避免存储更多相同的事实(如果有的话)。
有没有办法做到这一点?谢谢,
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).