我有這樣的代碼:保存文本或其他
open('file.txt', append, Stream),
write(Stream, (clause(t1))),
close(Stream)
我重複了好幾次在我的節目,然後我打開和關閉文件幾次。我可以打開文件,只需將內容保存到帶有append的列表中,最後將該列表保存在文件中?
我有這樣的代碼:保存文本或其他
open('file.txt', append, Stream),
write(Stream, (clause(t1))),
close(Stream)
我重複了好幾次在我的節目,然後我打開和關閉文件幾次。我可以打開文件,只需將內容保存到帶有append的列表中,最後將該列表保存在文件中?
您可以使用一個象徵性的別名流,然後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).
點要注意的是用於引用流別名...
我可以通過其他規則調用別名嗎?例如'save1'' save2'' save3'。或者我應該打開每個規則的文件? –
不知道我理解這個問題......但是,可以爲不同的規則使用相同的別名。一個別名,它是一種全局變量... – CapelliC
如果我有'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(從句).',我有同樣的問題,因爲在兩個規則中,打開兩次文件。 –
哪裏子句(t1)等是從哪裏來的?難道你不能只用一個列表添加並將* it *保存到文件中?或者,您是否從外部來源以動態方式*獲得此信息?你仍然可以通過'asserta'和'retract'收集它。 –
對不起,這個'子句(t1)'是從我以前沒有寫過的一些評估中推導出來的。我在我的文件中獲得了:幾個週期後的'子句(t1),子句(t2),子句(t3)'。我怎麼做才能獲得這個不打開文件多次,但只有一次。 –