2013-07-23 69 views
2

我有这样的代码:保存文本或其他

open('file.txt', append, Stream),   
write(Stream, (clause(t1))), 
close(Stream) 

我重复了好几次在我的节目,然后我打开和关闭文件几次。我可以打开文件,只需将内容保存到带有append的列表中,最后将该列表保存在文件中?

+0

哪里子句(t1)等是从哪里来的?难道你不能只用一个列表添加并将* it *保存到文件中?或者,您是否从外部来源以动态方式*获得此信息?你仍然可以通过'asserta'和'retract'收集它。 –

+0

对不起,这个'子句(t1)'是从我以前没有写过的一些评估中推导出来的。我在我的文件中获得了:几个周期后的'子句(t1),子句(t2),子句(t3)'。我怎么做才能获得这个不打开文件多次,但只有一次。 –

回答

2

您可以使用一个象征性的别名流,然后open有选择的别名文件,运行程序,发放合格别名如流写入,然后完成后关闭该文件。

这里虚设例如:

save :- 
    open('myfile.txt', write, _, [alias(clauses)]), 
    forall(between(1,100,N), 
      format(clauses, 'clause(~d).~n', N)), 
    close(clauses). 

然后 'myfile.txt的' 将包含

clause(1). 
clause(2). 
clause(3). 
... 
clause(99). 
clause(100). 

点要注意的是用于引用流别名...

+0

我可以通过其他规则调用别名吗?例如'save1'' save2'' save3'。或者我应该打开每个规则的文件? –

+0

不知道我理解这个问题......但是,可以为不同的规则使用相同的别名。一个别名,它是一种全局变量... – CapelliC

+0

如果我有'save:--open('myfile.txt',write,_,[别名(从句)]), forall(介于(1,100,N), 格式(子句,'子句(〜d)。〜n',N)), close(clauses).'然后'save2:-open('myfile.txt',write,_,[别名(子句)] ), forall(在(101,200,N), 格式(从句,'条款(〜d)。〜n',N)), close(从句).',我有同样的问题,因为在两个规则中,打开两次文件。 –

相关问题