2013-07-23 71 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(從句).',我有同樣的問題,因爲在兩個規則中,打開兩次文件。 –

相關問題