Prolog管道部分输入,用户输入其余部分

时间:2012-12-09 06:35:03

标签: stream prolog pipe gnu-prolog

我正在编写带有输入循环的prolog程序。大量输入是在响应文件中预先编写的。我以prolog < response.txt执行此操作。当响应文件完成后,我希望程序继续通过键盘用户输入。但是,当响应文件完成时,它不会从键盘读取/ 1,而是继续以无限循环end_of_file作为输入读取。

一旦管道到达文件末尾,我希望程序恢复用户输入的输入。我该怎么做?

提前致谢。

1 个答案:

答案 0 :(得分:0)

可以查询和重定向输入流。

不确定您使用的是哪个版本的Prolog,但SWI-Prolog有足够的methods来重定向您的输入流。

如果输入来自键盘,TTY将等于true

current_input(Stream), stream_property(Stream, tty(TTY)).

如果输入来自文件,则Filename将从中读取每个文件输入的名称:

current_input(Stream), stream_property(Stream, file_name(Filename)).

您可以将Stream设置为set_input/1谓词的输入:

{obtain a Stream handle}, set_input(Stream).

我希望你可以在此基础上进行构建,因为我还没有想出你应该如何要求键盘输入Stream。

您可能必须确定正在运行的操作系统,并为每个操作系统设置不同的方法以将输入设置为键盘流。