2

我在 Prolog 中遇到了关于向文件“relations.pl”添加新事实的问题。每次我得到事实时,我都会保存它们并使用

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

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

有没有办法做到这一点?谢谢,

4

1 回答 1

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).
于 2014-06-29T16:32:06.773 回答