【问题标题】:Adding new facts to a file in Prolog在 Prolog 中向文件添加新事实
【发布时间】:2014-06-29 16:08:07
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您可以将文本附加到文件中,但请注意,这很容易导致很多错误和不一致。而是一次写完。

标签: prolog sicstus-prolog


【解决方案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).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多