首先,失敗的原因:
您使用不惹回溯,它可以是一個很好的技術,但不存在。因爲當成員用完解決方案時,它最終會使謂詞錯誤。然後,一旦loop_through_list爲false,告知未達到,寫入不正確(當我測試它時,文件被創建但沒有寫入)。
如果你使用:
loop_through_list([]).
loop_through_list([Head|Tail]) :-
write(Head),
write(' '),
loop_through_list(Tail).
相反,它的工作原理。
但是,即使使用此代碼工作,您可能也希望使用 打開(文件名,寫入,流),寫入(流,元素)和關閉(流),而不是告訴並告知鏈接中解釋的原因在這個答案的底部。
例如:
loop_through_list(_File, []) :- !.
loop_through_list(File, [Head|Tail]) :-
write(File, Head),
write(File, ' '),
loop_through_list(File, Tail).
write_list_to_file(Filename,List) :-
open(Filename, write, File),
loop_through_list(File, List),
close(File).
或
loop_through_list(File, List) :-
member(Element, List),
write(File, Element),
write(File, ' '),
fail.
write_list_to_file(Filename,List) :-
open(Filename, write, File),
\+ loop_through_list(File, List),
close(File).
使用您的代碼和joel76伎倆。
請參閱Prolog how to save file in an existing file
它涵蓋了同樣的問題。
來源
2011-11-27 22:12:29
m09
查看運行'write_list_to_file/2'時創建的文件!很可能它不僅包含列表中的元素,還包含文件末尾的其他一些非預期數據。正如其他人已經指出的那樣,使用'open/3'和'close/1'更安全。 – false
我很好奇在哪裏可以找到關於告訴和告訴的不可靠性的信息,你可以指點我嗎? – chutsu
你找到一個解釋[這裏](http://stackoverflow.com/questions/8269971/prolog-how-to-save-file-in-an-existing-file/8270091#8270091) – false