在 SWI-Prolog 中,调用 copy_stream_data 时,如何避免出现“|:”提示?
In SWI-Prolog, when calling copy_stream_data, how can I avoid the '|: ' prompt?
我已经使用 copy_stream_data
在 SWI-Prolog 中实现了一个 cat
程序。
文件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).
当我使用该程序从 stdin
到 stdout
cat
时,它会打印一个提示符 |:
,它需要来自 stdin
的输入。我怎样才能避免该提示?
|:
提示仅在 stdout
是终端时出现。当 stdout
是一个文件时它不会出现。因此,当您的输出重定向到文件时,它不会在输出中造成垃圾。但是,还是不太好。
为了避免提示,使用 built-in predicate prompt
清除它,如下所示:prompt(_, '')
,您可以将其插入到 main(Argv)
谓词中:
main(Argv) :-
prompt(_, ''),
withFilesOrUserInput(catStream, Argv).
您还可以在程序开始时放置一个带有 prompt(_, '')
谓词的子句,方法是在代码顶部插入以下内容:
:- prompt(_, '').
您甚至可以在模块中 :- module()
子句之后执行此操作。
我已经使用 copy_stream_data
在 SWI-Prolog 中实现了一个 cat
程序。
文件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).
当我使用该程序从 stdin
到 stdout
cat
时,它会打印一个提示符 |:
,它需要来自 stdin
的输入。我怎样才能避免该提示?
|:
提示仅在 stdout
是终端时出现。当 stdout
是一个文件时它不会出现。因此,当您的输出重定向到文件时,它不会在输出中造成垃圾。但是,还是不太好。
为了避免提示,使用 built-in predicate prompt
清除它,如下所示:prompt(_, '')
,您可以将其插入到 main(Argv)
谓词中:
main(Argv) :-
prompt(_, ''),
withFilesOrUserInput(catStream, Argv).
您还可以在程序开始时放置一个带有 prompt(_, '')
谓词的子句,方法是在代码顶部插入以下内容:
:- prompt(_, '').
您甚至可以在模块中 :- module()
子句之后执行此操作。