In primo luogo, perché non riesce:
Si utilizza riuscire a provocare backtracking, che può essere una buona tecnica, ma non c'è. Perché renderà falso il tuo predicato alla fine, quando il membro ha esaurito le soluzioni. Quindi, una volta che loop_through_list è falso, detto non viene raggiunto e la scrittura non viene eseguita correttamente (quando eseguo il test, il file viene creato ma non viene scritto nulla).
Se si utilizza:
loop_through_list([]).
loop_through_list([Head|Tail]) :-
write(Head),
write(' '),
loop_through_list(Tail).
invece, funziona.
Ma, anche con questo codice funzionante, è possibile utilizzare aperto (Nome file, scrittura, Stream), scrivere (Stream, Elemento) e chiudere (Stream) invece di raccontare e raccontare per i motivi spiegati nel collegamento in fondo a questa risposta.
Per esempio:
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).
o
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).
utilizzando il codice e trick joel76.
Vedere Prolog how to save file in an existing file
Riguarda la stessa questione.
Cerca nel file creato durante l'esecuzione di 'write_list_to_file/2'! Molto probabilmente non avrà solo gli elementi della lista, ma anche alcuni altri dati non voluti alla fine del file. Come altri hanno già osservato, l'uso di 'open/3' e' close/1' è molto più sicuro. – false
Sono curioso di sapere dove si trovano le informazioni sull'affidabilità del racconto e del racconto, puoi gentilmente indicarmi la fonte? – chutsu
Trovate una spiegazione [qui] (http://stackoverflow.com/questions/8269971/prolog-how-to-save-file-in-an-existing-file/8270091#8270091) – false