在Prolog中向文件添加新事实

时间:2014-06-29 16:08:07

标签: prolog sicstus-prolog

我在Prolog中遇到一个问题,即在文件中添加新的事实' relations.pl'。每次我得到事实我都会保存它们并使用

tell('relations.pl').
listing(relation).
told.

唯一的问题是我想插入新的事实,并避免存储相同的事实,如果有的话。

有没有这样做? 谢谢,

1 个答案:

答案 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).