0

我已经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).

当我使用程序 to catfrom stdinto时,它会在期望输入的地方stdout打印一个提示。我怎样才能避免这个提示?|:stdin

4

1 回答 1

0

|:提示仅在是终端时出现stdoutstdout当是一个文件时它不会出现。因此,当您的输出被重定向到文件时,它不会在输出中造成垃圾。但是,还是不好看。

为了避免提示,请使用内置谓词prompt清除它,例如:prompt(_, ''),您可以将其插入main(Argv)谓词中:

main(Argv) :-
    prompt(_, ''),
    withFilesOrUserInput(catStream, Argv).

您还可以在程序开始时放置一个带有prompt(_, '')谓词的子句,方法是在代码顶部插入以下内容:

 :- prompt(_, '').

您甚至可以在模块中的:- module()子句之后执行此操作。

于 2015-08-26T19:23:45.617 回答