我一直试图遍历列表并将其写入文件,为什么以下不起作用?
loop_through_list(List) :-
member(Element, List),
write(Element),
write(' '),
fail.
write_list_to_file(Filename,List) :-
tell(Filename), % open file to be written
loop_through_list(List),
told. % flush buffer
Run Code Online (Sandbox Code Playgroud)
首先,它为什么失败:
你使用失败引发回溯,这可能是一个很好的技术,但不是那里.因为当成员用完解决方案时,它最终会使你的谓词错误.然后,一旦loop_through_list为false,则告知未到达并且写入不正确(当我测试它时,文件被创建但没有写入任何内容).
如果您使用:
loop_through_list([]).
loop_through_list([Head|Tail]) :-
write(Head),
write(' '),
loop_through_list(Tail).
Run Code Online (Sandbox Code Playgroud)
相反,它的工作原理.
但是,即使使用此代码,您可能希望使用open(文件名,写入,流),写(流,元素)和关闭(流)而不是告诉并告知在此底部的链接中解释的原因回答.
例如 :
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).
Run Code Online (Sandbox Code Playgroud)
要么
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).
Run Code Online (Sandbox Code Playgroud)
使用你的代码和joel76技巧.
请参阅Prolog如何在现有文件中保存文件
它涵盖了同样的问题.