En primer lugar, por qué no funciona:
Utiliza dejar de provocar el retroceso, que puede ser una buena técnica, pero no existe. Porque al final hará que su predicado sea falso, cuando el miembro se haya quedado sin soluciones. Entonces, una vez que loop_through_list es falso, no se ha contactado y la escritura no se ha realizado correctamente (cuando lo pruebo, se crea el archivo pero no se escribe nada).
Si utiliza:
loop_through_list([]).
loop_through_list([Head|Tail]) :-
write(Head),
write(' '),
loop_through_list(Tail).
lugar, funciona.
Pero, incluso con este código funcionando, es posible que desee utilizar abierto (Nombre de archivo, escritura, Stream), escribir (Stream, Element) y cerrar (Stream) en lugar de decir y contar por los motivos explicados en el enlace en la parte inferior de esta respuesta.
Por ejemplo:
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).
utilizando su código y truco joel76.
Ver Prolog how to save file in an existing file
Cubre el mismo asunto.
¡Busca en el archivo que creaste al ejecutar 'write_list_to_file/2'! Es probable que no solo contenga los elementos de la lista, sino también otros datos no deseados al final del archivo. Como otros ya han comentado, usar 'open/3' y' close/1' es mucho más seguro. – false
Tengo curiosidad por saber dónde se puede encontrar la información sobre la falta de fiabilidad de contar y contar, ¿me puede indicar amablemente la fuente? – chutsu
Encontrará una explicación [aquí] (http://stackoverflow.com/questions/8269971/prolog-how-to-save-file-in-an-existing-file/8270091#8270091) – false