, başarısız neden:
Sen ancak orada iyi bir teknik olabilir backtracking, kışkırtmak için başarısız kullanın. Çünkü üye, çözümlerin tükendiği zaman, yükleminizi yanlış yapacaktır. Daha sonra, loop_through_list öğesi false olduğunda, ulaşılmadığı ve yazının düzgün yapılmadığı (bunu test ettiğimde, dosya oluşturulur, ancak hiçbir şey yazılmaz).
Eğer kullanıyorsanız:
loop_through_list([]).
loop_through_list([Head|Tail]) :-
write(Head),
write(' '),
loop_through_list(Tail).
yerine, işe yarıyor.
Ancak, bu kod çalışırken bile, open (Filename, write, Stream), write (Stream, Element) ve close (Stream) kullanmak yerine bağlantıda açıklanan nedenleri anlatmak isteyebilirsiniz. bu cevabın alt kısmında. Örneğin
:
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).
veya
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).
kodunuzu ve joel76 hile kullanarak
.
Bkz. Prolog how to save file in an existing file
Aynı konuyu kapsar.
'Write_list_to_file/2' çalıştırırken oluşturduğunuz dosyaya bakın! Muhtemelen, yalnızca listenin içindeki öğeleri değil, aynı zamanda dosyanın sonundaki diğer istenmeyen verileri de içerir. Diğerleri zaten belirttiği gibi, 'open/3' ve' close/1' kullanmak daha güvenlidir. – false
Güvenilmezlik hakkındaki bilgilerin nerede bulunduğunu merak ettim, beni kaynağa yönlendirebilir misiniz? – chutsu
Burada bir açıklama bulabilirsiniz (burada) (http://stackoverflow.com/questions/8269971/prolog-how-to-save-file-in-an-existing-file/8270091#8270091) – false