Thứ nhất, tại sao nó không thành công:
Bạn sử dụng không kích tùy ý, có thể là một kỹ thuật tốt, nhưng không có. Bởi vì nó sẽ làm cho vị ngữ của bạn sai khi kết thúc, khi thành viên đã hết các giải pháp. Sau đó, một khi loop_through_list là sai, nói không đạt được và các văn bản không được thực hiện đúng (khi tôi kiểm tra nó, tập tin được tạo ra nhưng không có gì được viết).
Nếu bạn sử dụng:
loop_through_list([]).
loop_through_list([Head|Tail]) :-
write(Head),
write(' '),
loop_through_list(Tail).
thay vào đó, nó hoạt động. Tuy nhiên, ngay cả khi mã này hoạt động, bạn có thể muốn sử dụng mở (Tên tệp, ghi, Luồng), ghi (Luồng, Phần tử) và đóng (Luồng) thay vì nói và được giải thích vì các lý do được giải thích trong liên kết ở cuối câu trả lời này.
Ví dụ:
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).
hoặc
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).
sử dụng mã của bạn và lừa joel76.
Xem Prolog how to save file in an existing file
Nó bao gồm cùng một vấn đề.
Nhìn vào tệp bạn đã tạo khi chạy 'write_list_to_file/2'! Rất có thể nó sẽ không chỉ có các thành phần của danh sách trong nó, mà còn một số dữ liệu không mong muốn khác ở cuối tệp. Như những người khác đã nhận xét, bằng cách sử dụng 'mở/3' và' đóng/1' là an toàn hơn nhiều. – false
Tôi tò mò về nơi mà thông tin về sự không đáng tin cậy của việc kể và nói có thể được tìm thấy, bạn có thể vui lòng chỉ cho tôi nguồn không? – chutsu
Bạn tìm thấy giải thích [ở đây] (http://stackoverflow.com/questions/8269971/prolog-how-to-save-file-in-an-existing-file/8270091#8270091) – false