我正在编写一个带有输入循环的序言程序。大量输入已预先编写在响应文件中。我将其执行为prolog < response.txt
. 响应文件完成后,我希望程序通过键盘用户输入继续。但是,当响应文件完成时,它不会从键盘读取/1,而是继续在无限循环中读取end_of_file
作为其输入。
一旦管道到达文件末尾,我希望程序恢复为用户键入的输入。我该怎么做呢?
提前致谢。
我正在编写一个带有输入循环的序言程序。大量输入已预先编写在响应文件中。我将其执行为prolog < response.txt
. 响应文件完成后,我希望程序通过键盘用户输入继续。但是,当响应文件完成时,它不会从键盘读取/1,而是继续在无限循环中读取end_of_file
作为其输入。
一旦管道到达文件末尾,我希望程序恢复为用户键入的输入。我该怎么做呢?
提前致谢。
可以询问和重定向您的输入流。
不确定您使用的是哪个版本的 Prolog,但 SWI-Prolog 有很多方法可以重定向您的输入流。
如果输入来自键盘,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。
您可能必须确定您在哪个操作系统上运行,并为每个操作系统设置不同的方法来将您的输入设置为键盘流。