我已使用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
输入来自|:
。我该如何避免这种提示?
答案 0 :(得分:0)
仅在stdout
是终端时才会显示stdout
提示。 prompt(_, '')
是文件时不会出现。因此,当输出重定向到文件时,它不会在输出中导致垃圾。但是,它仍然不太好。
为了避免提示,请使用built-in predicate prompt
清除它,如下所示:main(Argv)
,您可以将其插入到main(Argv) :-
prompt(_, ''),
withFilesOrUserInput(catStream, Argv).
谓词中:
prompt(_, '')
您还可以在程序启动时使用 :- prompt(_, '').
谓词放置一个子句,方法是在代码顶部插入以下内容:
:- module()
您甚至可以在{{1}}子句之后的模块中执行此操作。