Во-первых, почему это не получается:
Вы используете провал, чтобы спровоцировать возврат, что может быть хорошей техникой, но не там.Потому что это сделает ваш предикат ложным в конце, когда у участника закончились решения.Затем, когда loop_through_list имеет значение false, сказанное не достигнуто, и запись не выполнена должным образом (когда я проверяю его, файл создается, но ничего не пишется).
Если вы используете:
loop_through_list([]).
loop_through_list([Head|Tail]) :-
write(Head),
write(' '),
loop_through_list(Tail).
вместо этого, это работает.
Но, даже если этот код работает, вы можете использовать open (Filename, write, Stream), write (Stream, Element) и close (Stream) вместо сказать ирассказано по причинам, указанным в ссылке внизу этого ответа.
Например:
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.
См. Пролог, как сохранить файл в существующем файле
Это относится к тому же вопросу.