D'abord, pourquoi il échoue:
Vous utilisez ne pas provoquer retours en arrière, ce qui peut être une bonne technique, mais pas là. Parce que cela rendra votre prédicat faux à la fin, quand le membre a manqué de solutions. Ensuite, une fois que loop_through_list est faux, dit n'est pas atteint et l'écriture n'est pas faite correctement (quand je le teste, le fichier est créé mais rien n'est écrit).
Si vous utilisez:
loop_through_list([]).
loop_through_list([Head|Tail]) :-
write(Head),
write(' '),
loop_through_list(Tail).
à la place, cela fonctionne. Mais, même avec ce code de travail, vous pouvez utiliser open (Filename, write, Stream), écrire (Stream, Element) et fermer (Stream) au lieu de dire et dit pour les raisons expliquées dans le lien au bas de cette réponse.
Par exemple:
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).
ou
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).
en utilisant votre code et astuce joel76.
Voir Prolog how to save file in an existing file
Il couvre la même matière.
Regardez dans le fichier que vous avez créé en exécutant 'write_list_to_file/2'! Tout à fait probablement il aura non seulement les éléments de la liste, mais aussi d'autres données non intentionnelles à la fin du fichier. Comme d'autres l'ont déjà remarqué, utiliser 'open/3' et' close/1' est beaucoup plus sûr. – false
Je suis curieux de savoir où l'information sur le manque de fiabilité de dire et dit peut être trouvé, pouvez-vous me diriger vers la source? – chutsu
Vous trouverez une explication [ici] (http://stackoverflow.com/questions/8269971/prolog-how-to-save-file-in-an-existing-file/8270091#8270091) – false