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

Stream Prolog管道部分输入,用户输入其余,stream,prolog,pipe,gnu-prolog,Stream,Prolog,Pipe,Gnu Prolog,我正在写一个带有输入循环的prolog程序。大量的输入是在响应文件中预先编写的。我以prolog

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

我希望程序在管道到达文件末尾后恢复为用户键入的输入。我该怎么做


提前感谢。

可以查询并重定向输入流

不确定您使用的是哪个版本的Prolog,但SWI Prolog有很多方法可以重定向您的输入流

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

current_input(Stream), stream_property(Stream, tty(TTY)).
如果输入来自文件,
Filename
将显示当前从中读取的文件输入名称:

current_input(Stream), stream_property(Stream, file_name(Filename)).
您可以将
设置为与
set\u input/1
谓词一起用作输入:

{obtain a Stream handle}, set_input(Stream).
我希望您可以在此基础上进一步发展,因为我还没有弄清楚如何请求键盘输入流


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

您可能需要显示用于检测文件是否已结束的代码位。不清楚为什么要这样做-是否要模拟用户输入
cat response.txt-prolog
可能足够好了。否则,使用命令行参数显式指示文件。我的程序有一个cli,是的,我想模拟用户输入,这是我一直在用prologcat response.txt-prolog,但它只是将response.txt显示在屏幕上,prolog对此没有任何作用。
cat response.txt-|prolog