सबसे पहले, क्यों यह विफल रहता है:
आप बैक ट्रैकिंग है, जो एक अच्छी तकनीक हो सकता है भड़काने के लिए असफल उपयोग करें, लेकिन वहाँ नहीं। चूंकि यह सदस्य अंत में गलत साबित कर देगा, जब सदस्य समाधान से बाहर हो गया है। फिर, एक बार loop_through_list गलत है, बताया गया है कि यह नहीं पहुंचा है और लेखन ठीक से नहीं किया गया है (जब मैं इसका परीक्षण करता हूं, फ़ाइल बनाई जाती है लेकिन कुछ भी लिखा नहीं जाता है)।
यदि आप का उपयोग करें:
loop_through_list([]).
loop_through_list([Head|Tail]) :-
write(Head),
write(' '),
loop_through_list(Tail).
इसके बजाय, यह काम करता है।
लेकिन, इस कोड के साथ भी, आप खुला (फ़ाइल नाम, लिखना, स्ट्रीम) लिखना, लिखना (स्ट्रीम, एलिमेंट) और बंद करने के बजाय बंद (स्ट्रीम) का उपयोग करना चाहते हैं और लिंक में समझाए गए कारणों के बारे में बताया इस उत्तर के नीचे।
उदाहरण के लिए:
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 चाल का उपयोग कर।
Prolog how to save file in an existing file
यह एक ही मामले को शामिल करता है।
'write_list_to_file/2' चलाते समय बनाई गई फ़ाइल को देखें! काफी संभावना है कि इसमें न केवल सूची के तत्व होंगे, बल्कि फ़ाइल के अंत में कुछ अन्य अनपेक्षित डेटा भी होंगे। जैसा कि अन्य ने पहले ही टिप्पणी की है, 'ओपन/3' और' क्लोज/1 'का उपयोग करना अधिक सुरक्षित है। – false
मैं उत्सुक हूं कि कहने और बताए जाने की अविश्वसनीयता की जानकारी मिल सकती है, क्या आप कृपया मुझे स्रोत पर इंगित कर सकते हैं? – chutsu
आपको एक स्पष्टीकरण मिलता है [यहां] (http://stackoverflow.com/questions/8269971/prolog-how-to-save-file-in-an-existing-file/8270091#8270091) – false