我已經通過使用copy_stream_data
在SWI-Prolog中實現了一個cat
程序。在SWI-Prolog中,當調用copy_stream_data時,如何避免「|:」提示?
文件args.pl
:
:- module(args, [withFilesOrUserInput/2]).
withFilesOrUserInput(StreamFunction, []) :-
call(StreamFunction, user_input).
withFilesOrUserInput(StreamFunction, [Filename]) :-
withFile(StreamFunction, Filename).
withFilesOrUserInput(StreamFunction, [Head|Tail]) :-
withFile(StreamFunction, Head),
withFilesOrUserInput(StreamFunction, Tail).
withFile(StreamFunction, Filename) :-
open(Filename, read, StreamIn),
call(StreamFunction, StreamIn),
close(StreamIn).
文件cat.pl
:
:- use_module(args).
main(Argv) :-
withFilesOrUserInput(catStream, Argv).
catStream(Stream) :-
copy_stream_data(Stream, user_output),
flush_output(user_output).
當我使用該程序來cat
從stdin
到stdout
,它打印的提示|:
在那裏它應該從stdin
輸入。我該如何避免這種提示?
(不是一個答案,而是對你的代碼的評論)有'setup_call_cleanup/3'來正確處理這種情況。在你的版本中,失敗或錯誤的調用(StreamFunction,StreamIn)不會關閉流。如果你有幾個答案,你將嘗試訪問一個已經關閉的流。 – false
雅我仍然在學習如何在Prolog中正確執行I/O。讓我們看看我什麼時候學習如何正確使用'setup_call_cleanup/3',也許今天,也許明天。然而,我沒有看到幾個答案會導致訪問一個已經關閉的流,但也許有一些我不明白的東西呢? –